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

berkut

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

к соседней закрытой теме - юзал поиск, переюзал, но реально нет ничего, альтернативного order by rand(). если выбирать 1 запись, то это тут обсуждалось, а как выбирать сразу несколько рандомных? единственное что приходит в голову, делать так-же как и с выборкой 1 ряда + union - столько раз, сколько рядов
 

berkut

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

fixxxer

К.О.
Партнер клуба
универсального решения (кроме озвученного с юнион) тут нет и все зависит от ситуации

два стандартных ограниченно применимых варианта - IN() с добором при непопадании и дополнительная табличка-карта

многое зависит от разреженности и отношения insert-delete
 

Ermitazh

Новичок
Автор оригинала: berkut
ну дык может подскажите, для чего вы это делаете, ибо непонятно мне, зачем говорить, что ответ есть на форуме, если там его нет
а тебе именно одним мускульным запросом нужно?
 

fixxxer

К.О.
Партнер клуба
вот кстати не понимаю я этих глупостей типа "одним запросом нужно"
кому нужно?
задачу решать нужно. реальную. не на олимпиаде по математике вроде.
вообще admin все сказал:)
 

Gas

может по одной?
fixxxer
твоё дополнение было тоже уместным, а то некоторым второй вариант даже в голову прийти не может (но применим при определённых условиях конечно).
 

HraKK

Мудак
Команда форума
Ermitazh
Боюсь твои :)

Чаще всего несколько запросов работают быстрее чем 1 но сложный.
 

Ermitazh

Новичок
я не думаю что выборка 3 рандомных числа сильно нагрузит базу...даже если и запрос сложный
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ermitazh
я не думаю что выборка 3 рандомных числа сильно нагрузит базу...даже если и запрос сложный
В самом деле?
А аргументы есть?

Мой аргумент против рандомных чисел
mysql> SELECT Benchmark(10000000, RAND());
+-----------------------------+
| Benchmark(10000000, RAND()) |
+-----------------------------+
| 0 |
+-----------------------------+
1 row in set (2.37 sec)


Следует дождаться ответа ТС-а.
 

fixxxer

К.О.
Партнер клуба
вы правда не понимаете что дело не в вызове rand() а в сортировке? :)
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
fixxxer
вы правда не понимаете что дело не в вызове rand() а в сортировке?
Уже применения rand() надцать раз занимает много времени.
А выборка с сортировкой по Рандому займет ещё больше времени.

Именно это я и хотел сказать.
 

Wicked

Новичок
сортировка по рандому займет времени не сильно больше (вообще, больше ли?), чем сортировка по полю без индекса с аналогичными характеристиками, что и у rand()-а.
 

fixxxer

К.О.
Партнер клуба
во-первых, сортировка без индекса это вообще очень плохая идея
во-вторых, тут помимо filesort еще будет создание временной таблицы. explain в руки ;)
 

ONK

Пассивист PHPСluba
Сортировка с помощью random() большого числа записей вообще плохая идея, надо искать другие решения.
Возможно дешевле поддерживать синтетический индекс для случайной выборки записей. Оправданность его использования зависит от соотношений числа запросов на выборку к числу запросов на удаление записей, а это соотношение в 99% случаев делает поддержание такого индекса выгодным.
 
Сверху