Выборка нескольких случайных записей из таблицы

Статус
В этой теме нельзя размещать новые ответы.

askarbin

Профессор
Регистрация
31 Мар 2009
Сообщения
292
Реакции
36
Подскажите, пожалуйста, ничего в голову не приходит. Нужно осуществить выборку трех случайных записей из таблицы, в которой поля идентификатора идут не в строгом порядке, т.е. 1,2,3,4,5,10,11,12,13,44,45,56,57... и т.д.
Если одним запросом это невозможно сделать, то может быть кто-то подскажет идею в связке с пхп?
 
если вам трех случайных записей, а не полей, тогда
Код:
SELECT * FROM table ORDER BY RAND() LIMIT 3
 
если вам трех случайных записей, а не полей, тогда
Код:
SELECT * FROM table ORDER BY RAND() LIMIT 3
Дело в том, что такой запрос, насколько мне известно, сильно загружает базу, т.к. mysql записывает во временную таблицу все строки исходной таблицы. При количестве записей > 100 000, нагрузка ощутима, ищу более "легкий" вариант решения проблемы, возможно стоит обратиться в сторону пхп и составить несколько запросов, но я никак не могу сообразить.
 
в скрипте вы можете выбрать только из входных данных, которые в свою очередь будут или идентификаторами строк, или общим количеством строк в таблице. имхо
 
например так будет легче:
PHP:
$res=mysql_query('SELECT count(*) FROM table');
$count=mysql_fetch_array($res)[0];
$result=mysql_query('SELECT * FROM table LIMIT '.rand(0,$count-1).',1');
обработать напильником и доработать по вкусу(JOIN,etc..)
 
Менее затратный способ выборки случайных полей одним запросом. Вместо LIMIT 2 поставить LIMIT [сколько нужно]

Код:
SELECT `id`,`value`, RAND() as rnd_id FROM `jos_jf_content` ORDER BY rnd_id LIMIT 2
 
Darkmind, чем ваш запрос быстрее чем запрос Sanuch-а?
порядок скорости одинаков
 
попробуй обойти ограничение времени исполнения скрипта
вы считаете, что это главная проблема?
главная проблема в суммарной нагрузке.даже если снять ограничения выполнения, сервер может повесится на больших объемах данных.

вот еще нагуглил интересное решение.
автор гарантирует существенный прирост скорости
 
А например добавить 3 переменных например:
$id_var1 = rand (0, 1000);
$id_var2 = rand (0, 1000);
$id_var3 = rand (0, 1000);

И потом из базы извлечь только те row'ы где id = нашим переменным?
 
А например добавить 3 переменных например:
$id_var1 = rand (0, 1000);
$id_var2 = rand (0, 1000);
$id_var3 = rand (0, 1000);
И потом из базы извлечь только те row'ы где id = нашим переменным?

В таблице может не быть записи с таким id :( Что тогда делать?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху