[英]Selecting records in groups by date - possible?
我认为没有一种优雅的方法可以做到这一点,但是可以。 数据库包含5000条记录,时间戳为2年。 我需要将记录保存在一年中的每一天下。
所以看起来像..
2009/09/09-record938,record2,record493
2009年9月10日-record260,record485,record610
...等等
我不能使用GROUP BY。 有重复项,没关系。 我需要给他们看。
这可能吗? PHP / MySQL?
一种方法是遍历一年中的每一天,并使用“ WHERE DAY(created_at)...”进行查询,但是显然这并不优雅。
我怎样才能做到这一点? 我在没有令人满意的答案之前就发布了这个问题 (答案就是我上面所说的)
MySQL具有group_concat()聚合函数 :
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.