MySQL:按日期分组记录

时间:2015-06-28 13:42:02

标签: mysql

我们说我有一张表order如下:

o_id | o_uid | o_date
1    | 5     | June 10, 2015
2    | 1     | June 10, 2015
3    | 8     | June 10, 2015
5    | 15    | June 11, 2015
6    | 11    | June 11, 2015
7    | 16    | June 12, 2015
8    | 19    | June 12, 2015

我尝试运行以下查询:

SELECT o_id, o_uid FROM order GROUP BY o_date

我认为它会给我如下结果:

[
    "June 10, 2015" => [
        [
            "o_id" => 1
            "o_uid" => 5
        ],
        [
            "o_id" => 2
            "o_uid" => 1
        ],
        [
            "o_id" => 3
            "o_uid" => 8
        ]
    ],
    "June 11, 2015" => [
        [
            "o_id" => 4
            "o_uid" => 15
        ],
        [
            "o_id" => 5
            "o_uid" => 11
        ]
    ],
    ...
]

查询未按预期提供结果。我可以使用PHP来获得所需的结果,但如果可以的话,为什么不使用MySQL并在一行中完成任务。 GROUP BY条款非常令人困惑。是否有其他条款可以按日期对记录进行分组?

我得到的结果: SQL Fiddle

1 个答案:

答案 0 :(得分:1)

使用

SELECT o_id, GROUP_CONCAT(o_id),GROUP_CONCAT(o_uid),o_date FROM `order`  
GROUP BY o_date

然后使用php / do操作相应地分隔逗号分隔列表。

输出:来自sqlfiddle的格式化程序输出。

o_id    GROUP_CONCAT(o_id)  GROUP_CONCAT(o_uid) o_date
1          1,2,3            5,1,8               June 10, 2015
4          4,5              15,11               June 11, 2015
6          6,7              16,19               June 12, 2015

<强> Fiddle