Отправляет email-рассылки с помощью сервиса Sendsay

[TC] MySQL. из общего числа выбрать по одному представителю от каждой группы

Здравствуйте, уважаемые!

Упрощенная задача выглядит так: таблица состоит из большого количества записей,
которые содержат критерий - номер группы от 1 до 10. Так вот, нужно выбрать по
одной записи от каждой группы и желательно сделать это одним запросом.

p.s. Либо я уже зарапортовался либо эту задачу придется решать более громоздким
способом, в несколько заходов.

Телепрограмма федеральных и кабельных каналов на неделю:
http://www.blindcompass.ru/tv.php
Грызунов Александр. Самара.

Ответить   Sun, 5 Feb 2012 18:55:54 +0300 (#2360969)

 

Ответы:

Vande omentaina, eastreb!
Я когда-то решал подобную задачу.
Нужно объединять селекты с помощью UNION:
"(SELECT * FROM `Table` WHERE `Category`=1 ORDER BY RAND() LIMIT 1) UNION (SELECT
* FROM `Table` WHERE `Category`=2 ORDER BY RAND() LIMIT 1) UNION..."
Я не знаю более рационального способа решения этой задачи в один запрос.

Ответить   Sun, 5 Feb 2012 17:39:06 +0200 (#2361004)

 

Приветствую всех.

по

Упрощенный ответ выглядит так:
select * from mytable group by `group_id`;
где
mytable -- имя таблицы;
group_id -- имя поля с номером группы.

Успехов. Анатолий.

Ответить   "i_chay" Mon, 6 Feb 2012 08:24:39 +0400 (#2361302)

 

Vande omentaina, i_chay!

Разве вы так выберете чётко один элемент из каждой категории?
Вы можете сказать, что мне никто не мешает пробежаться по циклу, профетчить это
всё в массивы и выбрать нужное, но смысл?

Ответить   Mon, 6 Feb 2012 14:17:01 +0200 (#2361741)

 

Приветствую всех.

А сколько, по-вашему, будет выбрано элементов из каждой категории?
Если более одного, то какая же эта будет группировка?

это

Нет, я так не скажу. Я вас спрошу, а зачем тогда GROUP BY?
Ведь то, что вы описали, можно сделать и с результатом запроса без GROUP BY.

Успехов. Анатолий.

Ответить   "i_chay" Mon, 6 Feb 2012 18:12:41 +0400 (#2361838)

 

Vande omentaina, i_chay!

Действительно, спутал.
Сорри.

Ответить   Mon, 6 Feb 2012 17:13:02 +0200 (#2361927)