$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个事件重复,查询不会超出第一个startdate。
我知道它与GROUP BY子句有关,还有一些关于聚合函数的东西,但我无法理解它。 - 输出显示在http://www.deliriousdreams.co.uk/ - &#34; DJ Schedule Test&#34;
非常感谢任何纠正稍微违法的SQL查询的帮助。
编辑:好的,时髦的人,修改为DATE(startdate)AS startdate。一个小小的问题,之后我希望能够按DATE然后TIME(最早的第一个)对它们进行排序 - 显然,DATE和TIME都是从startdate(DATETIME标记)派生的 - 这可能是通过修改上述查询或者是我必须做一些PHP巫术吗?答案 0 :(得分:0)
您选择的是开始日期,但按DATE(startdate)
如果字段startdate是datetime,并且您只想按日期分组,那么您应该按日期选择数据和分组。
尝试将您的查询更改为此
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注入的影响
答案 1 :(得分:0)
它完成了!这是我正在寻找的解决方案......
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