[MySQL] выбор случайных записей

123 4
rtyug
На сайте с 13.05.2009
Offline
263
4255

есть запрос:



SELECT t2.id_gr, t2.name_group, t2.description

FROM groups_contents AS t1

inner JOIN groups AS t2

ON t1.id_gr = t2.id_gr

WHERE t1.id_co = ?

LIMIT 10

как сделать чтобы было 10 случайных записей?

таблицы не маленькие...

нашел аналогичные темы:

http://forum.vingrad.ru/forum/topic-119426/0.html

http://forum.vingrad.ru/forum/topic-133667/0.html

http://jan.kneschke.de/projects/mysql/order-by-rand/

но не понял как сделать в моем случае...

ещё один способ:



Предположим надо выбрать из таблицы "cooccurrences" 2 случайных записей.

$cnt нам известен,. Скриптом генерим два случайных числа rand()%$cnt. предположим получились 15,20







SELECT * FROM (SELECT @row:=@row+1 as rownum, cooccurrences.* FROM (SELECT @row=0)r,cooccurrences) ranked WHERE rownum IN(15,20)













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



но как это сделать для моего запроса?

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
Diffio
На сайте с 29.06.2009
Offline
32
#1

Может ORDER BY RAND() ?

Хостинг с отличными показателями: Arvixe (http://www.arvixe.com/1998.html). И ценами.
rtyug
На сайте с 13.05.2009
Offline
263
#2

а если id не существует?

оно сработает?

Diffio
На сайте с 29.06.2009
Offline
32
#3
rtyug:
а если id не существует?

оно сработает?

Какой id? Просто напишите в запросе: ORDER BY RAND()

maldivec
На сайте с 04.11.2008
Offline
160
#4

Стер, туплю...

Diffio
На сайте с 29.06.2009
Offline
32
#5
maldivec:
При чем тут вообще ORDER BY ? Вы хоть знаете, что это такое?

Что хочет получить в резульате запроса автор темы? Из всех полученных записей получить 10 случайных - именно так, насколько я знаю, решается этот вопрос в MySql, используется LIMIT и ORDER BY RAND() - тогда весь результат "перемешивается" и берутся 10 первых из этого результата.

Вот еще примеры:

http://akinas.com/pages/en/blog/mysql_random_row/

http://davidwalsh.name/return-random-records-mysql

[Удален]
#6
Diffio:
Может ORDER BY RAND() ?

запрос, который нагибает раком бд при использовании "как в книгах пишут" :)

решения все самые "рандомные" на базе его, но не в "чистом виде" :)

bearman добавил 25.07.2010 в 12:27

select * from `a` inner join(select id from `a` ORDER BY `id` LIMIT 10) `b` USING(`id`)

вот такой запрос меньше нагнет базу :)

значительно меньше ;)

LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#7

1. Мне страшно за "разработка мультимедиа движка", которая у ТС в подписи

2. Вы там напишите в соавторах жителей сёрча :)

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
RO
На сайте с 13.07.2009
Offline
88
#8
bearman:
select * from `a` inner join(select id from `a` ORDER BY `id` LIMIT 10) `b` USING(`id`)

разве тут будет 10 случайных записей? здается мне что будет 10 записей начиная с первой...

N
На сайте с 06.05.2007
Offline
419
#9

LEOnidUKG, bearman, а правда что у персонала высокопроизводительных сайтов сиськи на 2 размера больше?

расслабьтесь вы. ТС не спрашивал как это сделать быстро.

Кнопка вызова админа ()
HraKK
На сайте с 02.03.2009
Offline
128
#10

Если уж делать самое быстрое то надо вести синтетический ключ в котором не будет дырок и выбирать X записей cгенерированных с помощью rand(1,max_synt_keys)

я гарант (/ru/forum/493343) уже не оказываю данные услуги, извините.
123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий