$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/ - “DJ时间表测试”
任何有关纠正稍微非法的 SQL 查询的帮助将不胜感激。
编辑:好吧,聪明的人们,修改为 DATE(startdate) AS startdate。一个小问题,之后我希望能够按日期和时间(最早的第一个)对它们进行排序 - 显然,日期和时间都是从开始日期(日期时间标记)派生的 - 这可以通过修改上面的查询来实现吗?我必须做一些 PHP 巫术吗?
最佳答案
您选择开始日期,但按日期(开始日期)
分组
如果字段开始日期是日期时间,并且您只想按日期分组,那么您应该选择一个数据并按日期分组。
尝试将您的查询更改为此
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 注入(inject)
关于php - MySQL GROUP BY 查询仅返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047014/