В моей базе данных на данный момент 300 строк, и, вероятно, в ближайшие годы она увеличится примерно до 5000 строк. Я хочу знать, как я могу выбрать 20 строк случайным образом.
Я нашел здесь MySQL быстро выбирает 10 случайных строк из 600 тыс. строк (где он снова ссылается на http://jan.kneschke.de/projects/mysql/order-by-rand/), что следующий код очень быстро производит случайный выбор:
SELECT name
FROM random AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(id)
FROM random)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1
поэтому в php я попробовал следующее, чтобы получить 20 строк:
$anfrage = "SELECT name
FROM random AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(id)
FROM random)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 20";
$ergebnis=$db->query($anfrage)
or die($db->error);
while($zeile=mysqli_fetch_assoc($ergebnis))print_r($zeile);
Но когда я запускаю скрипт, большую часть времени я не получаю 20 строк. На самом деле вероятность выбрать 20 разных строк из 300 составляет около 48,8%.
Могу ли я изменить приведенный выше код, чтобы получить действительно 20 строк очень быстро?