Используйте инструкцию update
.
update issued_books set Book_4 = $IssuedBookNumber
where Student_ID = '$Student_ID'
Предположительно, вы не знаете, сколько строк будет возвращено, поэтому это необходимо вычислить.
Идея заключается в следующем:
rand()
в предложении WHERE
, чтобы свести множество к разумному числу. order by rand()
для окончательной случайности. Это выглядит так:
select t.*
from (select t1.*, (@cnt := @cnt + 1) as seqnum,
rand() as rnd
from table1 t1 cross join
(select @cnt := 0) params
where not exists (select id
from table2
where id = table1.id
) and
prize_list_id = 100 and
prize_group_id in (109, 111, 113, 119, 120, 127, 129)
) t
where rnd < 2000 / @cnt
order by rnd
limit 1000
where
следует выбрать где-то около 2000 строк, что является безопасным числом, чтобы убедиться, что у вас есть по крайней мере 1000 (на самом деле, вы можете использовать меньшее число, например 1200). order by
находится в меньшем подмножестве и должен быть быстрее.
Я не думаю, что rand()
является особенно дорогой функцией, но это предварительно вычисляет значение для каждой строки, поэтому она вызывается только один раз для каждой строки в подзапросе.