MySQL GROUP BY查询只返回一行

时间:2014-11-20 18:35:42

标签: php mysql

    $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巫术吗?

2 个答案:

答案 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