$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