php - Laravel Eloquent 获取按天分组的结果

标签 php mysql sql laravel laravel-4

我目前有一个page_views表,每次访问者访问一个页面时记录一行,记录用户的ip/id和页面本身的id。我应该补充一点,created_at 列的类型是:timestamp,因此它包括小时/分钟/秒。当我尝试 groupBy 查询时,由于秒数差异,它不会将同一天组合在一起。

created_at         page_id       user_id
==========         =======       =======
10-11-2013            3            1
10-12 2013            5            5
10-13 2013            5            2
10-13 2013            3            4
  ...                ...          ...

我想根据每天的观看次数获得结果,所以我可以得到类似的结果:

  date          views
  ====          =====
10-11-2013       15
10-12 2013       45
  ...            ...

我想我需要深入研究 DB::raw() 查询来实现这一点,但任何见解都会有很大帮助,谢谢

编辑:添加了对 created_at 格式的说明。

最佳答案

我相信我已经找到了解决这个问题的方法,关键是mysql中的DATE()函数,它将一个DateTime转换为只是Date:

DB::table('page_views')
      ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views'))
      ->groupBy('date')
      ->get();

然而,这并不是一个真正的 Laravel Eloquent 解决方案,因为这是一个原始查询。以下是我用 Eloquent-ish 语法提出的。第一个 where 子句使用碳日期进行比较。

$visitorTraffic = PageView::where('created_at', '>=', \Carbon\Carbon::now->subMonth())
                            ->groupBy('date')
                            ->orderBy('date', 'DESC')
                            ->get(array(
                                DB::raw('Date(created_at) as date'),
                                DB::raw('COUNT(*) as "views"')
                            ));

关于php - Laravel Eloquent 获取按天分组的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20603075/

相关文章:

php - 销售队伍 : Retrieve custom fields via PHP

php - 使用 PHP rand() 预测随机数的可能性

mysql - 使用 PostgreSQL 进行全文搜索是否需要 thinking-sphinx?

python - sqlalchemy 过滤器中的安全参数绑定(bind)

php - 如何显示数据库中存储的图像?

php - 为什么我的 tmp_file_upload 文件不存在?我正在使用 php 5.6

mysql - 你将如何优化这个 MySQL 查询

MySQL 连接错误 2003 (HY000) : <IP Address> (110)

sql - 从 sql 查询结果中删除域

mysql - 寻找主服务器数据库环境来运行 SQL 查询