我目前有一个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/