Вывод случайной записи из таблицы

  • Автор темы Автор темы dima333
  • Дата начала Дата начала

dima333

Новичок
Вывод случайной записи из таблицы

В таблице имеется более 1000 записей. Какой нужен запрос к базе чтобы каждый раз выводилась случайная запись из базы???
Плиззз, помогите.
 
А нужно ли вам это ?
SELECT *
FROM table
ORDER BY RAND()
Только эта операция не сильно оптимизирована в Mysql.
Возможно имеет смысл сделать запрос выбрать айдишники - сделать array_rand в php.
просто чревато тормозами - если мускулем это делать
 
Ok Thx. Подумаю над этой темой
Btw, Я не утверждал что мое решение самое оптимальное, это самое простое и самое быстрое
Есть варианты другие. Все на самом деле зависит от точной постановки задачи. От того какой storage engine у таблицы и какие данные там
 
*****, ты имел ввиду ?
И всё же быстрее может оказаться решение в два запроса.
SELECT COUNT(*) ... + SELECT * ... LIMIT $rand,1, где $rand вычисляется на PHP
Это да идея - не юзал никогда

-~{}~ 23.01.09 20:19:

Только тут возникает проблема индексов
Если в таблице много записей, и limit больше 1000 например, то он будет все равно делать выборку 1001 записи.
То есть тут надо хитро делать

-~{}~ 23.01.09 20:19:

И если идет выборка более чем 30% записей из таблицы, то индексы не юзаются
 
Разжевывалось в поиске 100500 тысч раз.

-~{}~ 23.01.09 20:39:

Поиск слева вверху.
 
Нашел только это
Искал по "случайная запись"
http://phpclub.ru/talk/showthread.p...F1%EB%F3%F7%E0%E9%ED%E0%FF+%E7%E0%EF%E8%F1%FC
http://phpclub.ru/talk/showthread.p...F1%EB%F3%F7%E0%E9%ED%E0%FF+%E7%E0%EF%E8%F1%FC
http://phpclub.ru/talk/showthread.p...F1%EB%F3%F7%E0%E9%ED%E0%FF+%E7%E0%EF%E8%F1%FC
http://phpclub.ru/talk/showthread.p...F1%EB%F3%F7%E0%E9%ED%E0%FF+%E7%E0%EF%E8%F1%FC
http://phpclub.ru/talk/showthread.p...F1%EB%F3%F7%E0%E9%ED%E0%FF+%E7%E0%EF%E8%F1%FC
И здесь смотрел
http://phpclub.ru/talk/search.php?s...chid=264497&sortby=after&sortorder=descending

Где я близорук ?

Никакой рациональной и новой идеи вообще не нашел в тех топиках
Может быть укажете мне на мою близорукость плиз. В упор не вижу где там подробно разжевывалось
 
Вообще и правда в поиске куча мусора, напишу на всякий случай :)

$max = select id from table order by id desc limit 1;

$rand = mt_rand(1, $max);

select * from table
where id >= $rand
order by id limit 1;
 
в поиске обязательно должна быть умная мысль (моя :)
если вам нужна абсолютная случайность на выборке из сказывающегося на производителности объема - значит, вы что-то не додумали.
 
Сверху