php - MySQL GROUP BY 查询仅返回一行

标签 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";

上面的查询仅返回一个结果(如预期的那样,一个日期有 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/

相关文章:

php - 2 表查询正确协议(protocol)

php - 通过 AJAX 处理大型数据集不会带来速度优势

php - 在递增数字上添加静态前缀

php - 使用mysql_real_escape_string存储后保持textarea输入格式

mysql - 如何使用mysql中的存储过程获取父子层次结构

php - yii2:在一行中连接多个值的下拉列表

PHP 绑定(bind) 'bigint' 数据类型(MySQLi 准备语句)

php - 使用 PHP-FPM 时可以覆盖 htaccess 中的 PHP 设置吗?

python - "pip freeze"给出了与 "help(' 模块不同的模块 ')"

mysql - 将 mssql 脚本转换为 mysql 更新表中的列以及其他表中的最新日期