Как получить случайные числа строк из базы данных MySQL? - PullRequest
0 голосов
/ 23 октября 2010

У меня есть около 300 записей в какой-то таблице в базе данных MySQL.И у меня есть требование выбрать 40 случайных записей одним запросом.Как написать запрос?нужна помощь спасибо.

Ответы [ 6 ]

3 голосов
/ 23 октября 2010

Для небольшой таблицы, подобной вашей, этого должно быть достаточно:

SELECT * FROM table ORDER BY RAND() LIMIT 40;

Обратите внимание, что это не подходит для больших таблиц, поскольку MySQL должен будет выполнить сканирование таблицы и упорядочить все строки в таблице.на использование ORDER BY RAND().Для больших таблиц вам придется реализовывать это в основном в коде приложения, отслеживая, какие строки вы уже получили, и генерируя случайные идентификаторы для извлечения.

2 голосов
/ 23 октября 2010

Вы должны использовать rand() с order by следующим образом:

SELECT field1, field2
FROM tableName
ORDER BY RAND()
LIMIT 40
1 голос
/ 23 октября 2010

order by rand() может вызвать проблемы с производительностью, вместо этого попробуйте сделать следующее:

 // what NOT to do:  
 $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1");  

 // much better:  

 $r = mysql_query("SELECT count(*) FROM user");  
 $d = mysql_fetch_row($r);  
 $rand = mt_rand(0,$d[0] - 1);  

  $r = mysql_query("SELECT username FROM user LIMIT $rand, 1");    
0 голосов
/ 31 июля 2011

вы должны использовать RAND() в предложении WHERE

, но сначала вы создаете фрагмент 40 / количество строк в таблице

ex:

SELECT * FROM [TABLE_NAME] WHERE RAND()< 0.0005;
0 голосов
/ 23 октября 2010

ВЫБРАТЬ * ИЗ СТОЛБА ЗАКАЗАТЬ ПО RAND () LIMIT 40

0 голосов
/ 23 октября 2010

Обратите внимание, что это не быстрое решение, но оно прекрасно работает только для 300 записей

SELECT [rows]
FROM [table]
ORDER BY RAND()
LIMIT 40
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...