使用PHP将MySQL中的时间戳分组

时间:2009-07-27 00:34:20

标签: mysql timestamp group-by

我想使用time()使用时间码记录MySql中的某些活动。现在我正在积累数千条记录,我想按小时/天/月等组输出数据。

在MySQL中对时间码进行分组的建议方法是什么?

示例数据:

  • 1248651289
  • 1248651299
  • 1248651386
  • 1248651588
  • 1248651647
  • 1248651700
  • 1248651707
  • 1248651737
  • 1248651808
  • 1248652269

示例代码:

$sql = "SELECT COUNT(timecode) FROM timecodeTable";
//GROUP BY round(timecode/3600, 1) //group by hour??

修改 有两个分组可以制作,所以我应该更清楚:一天24小时可以分组,但我更感兴趣的是随着时间的推移分组,所以每年返回365个结果跟踪到位,所以每个一天过去了,然后能够选择一系列日期,并查看在所选时间内访问的小时/分钟的更多详细信息。

这就是为什么我把它命名为使用PHP,因为我希望通过PHP循环生成小时/天等可能会更容易?

1 个答案:

答案 0 :(得分:13)

彼得

SELECT COUNT(*), HOUR(timecode)
FROM timecodeTable
GROUP BY HOUR(timecode);

根据上述数据,您的结果集看起来如下:

+----------+----------------+
| COUNT(*) | HOUR(timecode) |
+----------+----------------+
|       10 |             18 | 
+----------+----------------+

可以找到更多相关功能here

修改

根据您评论的输出对我自己进行一些测试后,我确定您的数据库处于史诗般的失败状态。 :)你使用INT作为TIMESTAMPs。这绝不是一个好主意。使用INT代替TIMESTAMP / DATETIME是没有正当理由的。

那就是说,你必须按如下方式修改上面的例子:

SELECT COUNT(*), HOUR(FROM_UNIXTIME(timecode))
FROM timecodeTable
GROUP BY HOUR(FROM_UNIXTIME(timecode));

修改2

您可以使用其他GROUP BY子句来实现此目的:

SELECT 
  COUNT(*),
  YEAR(timecode),
  DAYOFYEAR(timecode),
  HOUR(timecode)
FROM timecodeTable
GROUP BY YEAR(timecode), DAYOFYEAR(timecode), HOUR(timecode);

注意,为简洁起见,我省略了FROM_UNIXTIME()。