2013-08-06 2 views
0

Вот пример того, что я пытаюсь сделать:выберите Постулаты с полем выбора, как (?, Что это называется)

я должен организовать список событий на месяц/год с графом событий, затем список запятой идентификаторов этих событий.

Вот что у меня есть:

 SELECT count(*) as counter, 
        MONTHNAME(publishDate) as month, 
        YEAR(publishDate) as year 
       FROM bursch.events 
    GROUP BY YEAR(publishDate), 
       MONTH(publishDate) 
    order by year desc; 

но, кроме того, мне нужны эти идентификаторы тоже (2,5,6) < < < так:

Вот концепция:

SELECT count(*) as counter, 
     MONTHNAME(publishDate) as month, 
     YEAR(publishDate) as year, 
     (select id 
      from events 
      where 'call conditions affect the main query') as IDList 
       FROM events 
    GROUP BY YEAR(publishDate), 
       MONTH(publishDate) 
    order by year desc; 

что бы привести к чему-то вроде этого:

counter | month | year | ids 
----------------------------------------- 
3  | June | 2013 | 45,49,50 
4  | July | 2013 | 39,40,41,42 
2  | March | 2011 | 33,34 
5  | May  | 2011 | 27,29,30,31,32 
1  | June | 2011 | 22 
4  | July | 2011 | 14,17,18,19 
1  | January | 2010 | 13 

Было бы здорово, если бы я мог основывать свои избранные результаты на условиях основного оператора select. Возможно, лучший способ получить этот результат. Может быть, более простой метод. Но выберите как полевую часть. Что бы это называлось? Коррелированный запрос? Не уверен. Я видел, что могу сделать это в Oracle и MySQL, и это пригодится (если бы я только знал, что он называется).

Спасибо в продвижении. Дайте мне знать, если что-то неясно.

ответ

2

MySQL имеет функцию, называемую GROUP_CONCAT(), которая объединяет строки вместо столбцов.

SELECT COUNT(*) as counter, 
     MONTHNAME(publishDate) as month, 
     YEAR(publishDate) as year, 
     GROUP_CONCAT(id) as IDs 
FROM events 
GROUP BY YEAR(publishDate), 
      MONTH(publishDate) 
ORDER BY year desc; 
+0

Вот оно! хорошая работа... –