Выберите случайную строку из SQL с помощью PHP


Я хочу запросить 5 случайных строк из моей таблицы SQL с помощью php. например, мне нужно:

mysql_query("SELECT * FROM catalogue >> not sure what goes here << LIMIT 5");
Author: SeinopSys, 2011-11-20

3 answers

SELECT * FROM catalogue order by RAND() LIMIT 5

Изменить:

Как бы то ни было, пожалуйста, обратите внимание, что использование rand() в таблице с большим количеством строк будет медленным. Это может привести к сбою вашего сервера.

Некоторое решение:

MediaWiki использует интересный трюк (для специальной функции Википедии: Случайная функция): в таблице со статьями есть дополнительный столбец со случайным числом (генерируется при создании статьи). Чтобы получить случайную статью, сгенерируйте случайное число и получите статью со следующим большим или меньшее (не помню, какое) значение в столбце случайных чисел. С индексом это может быть очень быстро. (И MediaWiki написан на PHP и разработан для MySQL.)

Но это только для одной случайной строки.

 20
Author: Pheonix, 2013-08-01 09:17:46

Предполагая, что в таблице есть АВТОМАТИЧЕСКОЕ УВЕЛИЧЕНИЕ, вы можете получить самый большой идентификатор с помощью

SELECT id FROM catalogue ORDER BY id DESC LIMIT 1

И наименьший идентификатор с

SELECT id FROM catalogue ORDER BY id ASC LIMIT 1

Что позволяет сделать это

$randomId = mt_rand($smallestId, $biggestId);
$randomSql = mysql_query("SELECT * FROM catalogue WHERE id='$randomId'");

Для пяти строк вы можете создать случайный идентификатор пять раз.

 5
Author: timonwimmer, 2014-07-01 21:57:39

Если вы выбираете случайные строки из очень большой таблицы, вы можете поэкспериментировать с подходами по следующей ссылке:

Http://akinas.com/pages/en/blog/mysql_random_row/

Примечание: просто чтобы поделиться другими вариантами со всеми

 3
Author: Nonym, 2011-11-20 08:15:43