Выбрать по одному произвольному представителю данного типа.

alpha

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

Есть табица.
STORIES
id
type
body
Мне нужно выбрать по одному ПРОИЗВОЛЬНОМУ представителю каждого типа. Не могу придумать как
запрос SELECT * FROM `STORIES` GROUP BY type ORDER BY RAND() работает не так. Вернее работает так, как написан, тоесть выбирает по одному представителю из группы и перемешиват их. Но выбирает он по ПЕРВОМУ добавленному в группу.
А как выбрать произвольного представителя группы?

Следующий вопрос. Как выбрать по 2 два произвольных представителя группы? )
 

Ermitazh

Новичок
Zetruger

SELECT *
и
GROUP BY type

это как?
А что тебя смущает?

-~{}~ 19.09.07 09:30:

alpha
Я думаю в этом случае тебе поможет join таблицы самой на себя. Вот тут всё написано, принцип такой

http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html
 

alpha

Новичок
Ermitazh не совсем понял как http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html применить к выбору произвольного элемента (
 

Ermitazh

Новичок
В подзапросе тебе необходимо выбрать случайного представителя группы, а не в главном запросе.
Примерно так
[sql]
SELECT id, type FROM `STORIES` as a JOIN (SELECT `type` as `tp` FROM `STORIES` WHERE a.id is not null GROUP by `tp` order by RAND() ) as b on a.id=b.id[/sql]
 

alpha

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

Zetruger

ivan.chistyakov.name
Ermitazh
А что тебя смущает?
ну то что при GROUP BY type
в SELECT можно преречислять либо, то что указано в GROUP BY
т.е. type (в данном случае)

либо GROUP-функции типа COUNT и т.д.

и также всякого рода расширения различных СУБД


а что выдает SELECT * я даж не представляю =)
 
Сверху