Вопрос для ГУРУ PHP+MySQL (рандомный выбор)

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

tolst

Новичок
Вопрос для ГУРУ PHP+MySQL (рандомный выбор)

Задача состаит вот в чем:

есть таблица к примеру вот:
CREATE TABLE `random` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
PRIMARY KEY (`id`)
);
далее запоняем её миллионом записей:
PHP:
<?php
for ($i = 0; $i < 1000000; $i++){
	mysql_query("INSERT INTO `random` ( `id` , `name` ) VALUES ('', '" . rand(0, 1000000) . "')");
}
?>
Теперь нужно выбрать несколько, к примеру 3 случайные записи, делаем выборку стандартным методом:
SELECT * FROM `random` ORDER BY RAND() LIMIT 3
Данный SQL запрос работает более 2-х секунд, это согласитесь не есть гуд, нужно выбрать эти случайные записи как то иначе, так что бы было значительно быстрее, причем обязательно одним запросом!!!

в мысли приходит только вот что:
1) Использовать WHERE id IN(rand_id_1, rand_id_2, rand_id_3) - тогда запрос выполняется в разы быстрее, но как внутри одного запроса выявить эти случайные ID?
2) Использовать BETWEEN, тут опять же возникает вопрос, где же эти злополучные ранды брать внутри определенного промежутка ID

можно конечно использовать вложенный запрос (SELECT COUNT(*) FROM `random`), но это бляха муха тоже не совсем верно...

Просьба помогите, причем все нужно сделать в 1 запрос, таковы требования... это нечто типо теста...

Искал по форуму, находил подобные темы, но там нет ответа именно на эту задачу (в 1 запрос)...
 

Alexandre

PHPПенсионер
сформируй три случйных числа и сделай селекt
SELECT * FROM tabl WHERE id in ( r1, r2, r3 )
если так медленно, то сделай UNION трех запросов
SELECT * FROM tabl WHERE id in = r*
 

Фанат

oncle terrible
Команда форума
Alexandre
вот дело даже не в том, что в твоем решении заложена детская ошибка.
а в том, что все это жевано-пережевано давно сто раз.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху