Запрос MySQL GROUP BY возвращает только одну строку

$q2 = "SELECT startdate, GROUP_CONCAT(summary separator '<br />') as summary, GROUP_CONCAT(TIME(startdate)) AS starttime, GROUP_CONCAT(TIME(enddate)) AS endtime FROM oc_clndr_objects WHERE calendarid = $calID GROUP BY DATE(startdate) ORDER BY startdate ASC"; 

Этот вышеприведенный запрос возвращает только один результат (3 события за одну 1 дату, как ожидалось) – однако есть одно событие, которое повторяется ежедневно, и запрос не выходит за рамки первой стартовой даты.

Я знаю, что это имеет какое-то отношение к предложению GROUP BY и что-то о функциях агрегации, но я не могу обернуть вокруг него голову. – Выход отображается на http://www.deliriousdreams.co.uk/ – «Тест ди-джея»,

Любая помощь в исправлении слегка незаконного SQL-запроса была бы очень оценена.

EDIT: Хорошо, отличные люди, с поправками DATE (startdate) AS startdate. Одно небольшое дрожь, после этого я хотел бы иметь возможность сортировать их по DATE, а затем TIME (сначала сперва). Очевидно, что и DATE, и TIME производятся от startdate (штамп DATETIME) – возможно ли это, изменив вышеуказанный запрос или Мне нужно сделать какое-то PHP колдовство?

Вы выбираете startdate, но группируете DATE(startdate)

Если начальная дата поля равна дате времени, и вы хотите группировать по дате, тогда вы должны выбрать данные и группу по дате.

Попробуйте изменить свой запрос на этот

  SELECT DATE(startdate) AS startdate, GROUP_CONCAT(summary separator '<br />') as summary, GROUP_CONCAT(TIME(startdate)) AS starttime, GROUP_CONCAT(TIME(enddate)) AS endtime FROM oc_clndr_objects WHERE calendarid = $calID GROUP BY DATE(startdate) ORDER BY startdate ASC 

Я надеюсь, что $calID – это чистая переменная, иначе ваш код будет подвержен SQL-инъекциям

И это сделано! Это решение, которое я искал …

 SELECT DATE(startdate) AS startdate, GROUP_CONCAT(summary separator '<br />') as summary, GROUP_CONCAT(TIME(startdate)) AS starttime, GROUP_CONCAT(TIME(enddate)) AS endtime FROM (SELECT * FROM oc_clndr_objects ORDER BY startdate ASC) AS temp WHERE calendarid = $calID GROUP BY DATE(startdate) ORDER BY DATE(startdate) ASC