$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";
上面的查询只返回一个结果(一个 1 个日期的 3 个事件符合预期) - 但是每天有 1 个事件重复,并且查询不会超过第一个开始日期。
我知道它与 GROUP BY 子句和聚合函数有关,但我无法理解它。 - 输出在 http://www.deliriousdreams.co.uk/可见 - "DJ时间表测试"
任何有关更正稍微非法的SQL查询的帮助将不胜感激。
编辑:好吧,时髦的人,修改为DATE(startdate)作为开始日期。一个小问题,之后我希望能够按日期和时间(最早的在前)对它们进行排序 - 显然 DATE 和 TIME 都是从开始日期(DATETIME 戳)派生的 - 这可以通过修改上面的查询还是我必须做一些 PHP 巫术?
您正在选择开始日期,但按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