Запрос для выборки 3 случайных записей

slivka_83

Новичок
Запрос для выборки 3 случайных записей

Добрый день, я бы хотел узнать способ (может кто сталкивался) выбрать из таблицы 3 случайные не повторяющиеся записи, и ,если это возможно, только средствами MySQL и только одним запросом.

Заранее большое спасибо.
 

slivka_83

Новичок
Спасибо ForJest за совет, все работает.

И еще...
Допустим в таблице содержаться товары и каждому из них присвоена категория (видио,музыка и т.д.):

id (10)
name (30)
firm(30)
category(30)

Можно ли из данной таблицы сделать выборку 3 случайных уникальных записей, так чтобы категории тоже были различными
 

slivka_83

Новичок
Автор оригинала: Апельсин
выбираете по одной случайной записи из каждой категории.
Это-то понятно. Но меня интересует практическая реализация данной проблемы. То есть не могли бы вы написать хоть примерный код
 

Апельсин

Оранжевое создание
iliah, не покатит. Оно сначала делает GROUP BY, а потом будет срабатывать ORDER BY RAND().

slivka_83, ну делаете либо 3 отдельных запроса с where category=# ORDER BY RAND() LIMIT 1, либо через UNION смотря какая у вас версия MySQL.
 

slivka_83

Новичок
slivka_83, ну делаете либо 3 отдельных запроса с where category=# ORDER BY RAND() LIMIT 1, либо через UNION смотря какая у вас версия MySQL. [/QUOTE]
Версия 4.12 кажется, а как union'ом можно сделать. Подскажите пожалуйста
 

Апельсин

Оранжевое создание
slivka_83, Открываешь мануал и читаешь про UNION. Очень познавательно, уверяю.
 

antson

Новичок
Партнер клуба
slivka_83
У Вас категорий больше трех ?

Сделайте в 4 запроса.
1. выбрать 3 случайных категории
2-4 в цикле по результатам первого запроса
выбирать случайную запись с условием по нужной категории


неуверен что сработает , писал по аналогии с MS-SQL
select * from table where id in (
select
(select id from table where kat_id=kategor.id order by rand() limit 0,1) as need_id
from kategor order by rand() limit 0,3
)
 

slivka_83

Новичок
Автор оригинала: Апельсин
slivka_83, Открываешь мануал и читаешь про UNION. Очень познавательно, уверяю.
Ну посмотрел я про этот union он же только объединяет запросы

т.е. вы хотите сказать что я должен написать что то типа

(select .... where category=x1 order by rand() limit 1)
union
(select .... where category=x2 order by rand() limit 1)
union
(select .... where category=x3 order by rand() limit 1)

Если вы это имели ввиду то мне придется выбирать только заранее определенные категории, а мне нужно чтобы они тоже были случайнвми.
Другими словами мне нужно отобрать три различные не повторяющиеся катигории и из каждой взять по 1 строки(тоже случайно выбранной)
 

chira

Новичок
slivka_83
почему такое сильное стремление к одному запросу?
версия MySQL какая?
 

slivka_83

Новичок
Автор оригинала: chira
slivka_83
почему такое сильное стремление к одному запросу?
версия MySQL какая?
Во-первых я думаю если все сделать одним запросом то получитья проще (размер кода) и нагрузка на сервер может будет поменьше.

Версия если не ошибаюсь 4.12а
 

antson

Новичок
Партнер клуба
slivka_83
вот так будет работать
select * from table , (
select
(select id from table where kat_id=kategor.id order by rand() limit 0,1) as need_id
from kategor order by rand() limit 0,3
) nuzno
where table.id=nuzno.need_id

-~{}~ 13.10.05 12:30:

если таблицы категорий нет, то использовать подзапрос
вместо kategor

(select distinct kategoria_name as id from table) kategor

-~{}~ 13.10.05 12:33:

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