我的应用程序是使用 Laravel 4.1 构建的,支持 Laravel 今天正式支持的几乎所有数据库。我有一个 INT(10) 列,用于存储每个“帖子”的 Unix 时间戳,以指示帖子的创建时间。
有没有一种方法可以让我从这种设置中获取每天的帖子数量?基本上,我想用 Google Chart API 制作一个图表来指示过去 1 个月每天发布的帖子数量的趋势。
此外,我不正在寻找围绕 DB::raw() 的解决方案,我更愿意使用查询生成器。
最佳答案
如果您想在数据库端执行聚合恕我直言,您必须使用 DB::raw()
因为您需要操作您的时间戳值。
如果理解正确,您主要关心的不是使用 DB::raw()
方法,而是不使用 供应商特定的日期时间函数(如 FROM_UNIXTIME()
在 MySQL 中)。
您可以发出这样的查询,以几乎与数据库无关的方式获得聚合结果(据我所知,所有主要的 DBMS 都有 FLOOR()
函数的实现)
SELECT FLOOR(timestamp / 86400) AS date , COUNT(*) AS total
FROM post
GROUP BY FLOOR(timestamp / 86400)
用查询生成器转换成这样的东西
$result = DB::table('posts')
->select(DB::raw('FLOOR(timestamp / 86400) AS date, COUNT(*) AS total'))
->groupBy(DB::raw('FLOOR(timestamp / 86400) AS date, COUNT(*) AS total'))
->get();
示例输出:
| DATE | TOTAL | |-------|-------| | 16081 | 2 | | 16082 | 3 |
Here is SQLFiddle demo
And then in the client code convert date
column value into a human readable form by
date('m/d/Y', 16081 * 86400)
当您遍历结果集时。
关于php - 时间戳列中的每日帖子计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21071453/