我认为没有一种优雅的方法可以做到这一点,但是这里有。数据库包含5000条记录,时间戳为2年。我需要在一年中的每一天下拉记录。
所以它看起来像..
09/09/2009 - record938,record2,record493
09/10/2009 - record260,record485,record610
...等
我不能使用GROUP BY。有重复,没关系。我需要展示它们。
这可能吗? PHP / MySQL的?
这样做的一种方法是循环查看一年中的每一天并使用“WHERE DAY(created_at)...”进行查询,但显然这不是很优雅。
我该怎么做?我之前发布this question没有得到满意答案(答案就是我刚才所说的)
答案 0 :(得分:4)
MySQL有group_concat() aggregate function:
SELECT date(rec_time), group_concat(rec_id)
FROM records GROUP BY date(rec_time);
对于每个日期,将返回逗号加入的表中的所有rec_id
值。如果您想要,
以外的分隔符,请使用group_concat(some_column SEPARATOR '-')
例如,如果您的表格如下:
+--------+---------------------+
| rec_id | rec_time |
+--------+---------------------+
| 1 | 2009-11-28 10:00:00 |
| 2 | 2009-11-28 20:00:00 |
| 3 | 2009-11-27 15:00:00 |
| 4 | 2009-11-27 07:00:00 |
| 5 | 2009-11-28 08:00:00 |
+--------+---------------------+
然后这个查询给出:
mysql> SELECT date(rec_time), group_concat(rec_id)
-> FROM records GROUP BY date(rec_time);
+----------------+----------------------+
| date(rec_time) | group_concat(rec_id) |
+----------------+----------------------+
| 2009-11-27 | 3,4 |
| 2009-11-28 | 1,2,5 |
+----------------+----------------------+
请注意,结果受group_concat_max_len
系统变量的限制,该变量默认只有1024个字节!为避免触及此墙,您应在运行查询之前执行此操作:
SET SESSION group_concat_max_len = 65536;
或更多,取决于您期望的结果数量。但是此值不能大于max_allowed_packet