我目前有一个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
格式说明。
发布于 2013-12-16 12:18:19
我相信我已经找到了解决这个问题的方法,关键是mysql中的DateTime ()函数,它将日期转换为日期:
DB::table('page_views')
->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views'))
->groupBy('date')
->get();
然而,这并不是真正的Laravel雄辩的解决方案,因为这是一个原始的query.The,下面是我用雄辩的语法想出来的。第一个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"')
));
发布于 2014-08-28 07:49:18
您可以使用Carbon (集成在Laravel中)
// Carbon
use Carbon\Carbon;
$visitorTraffic = PageView::select('id', 'title', 'created_at')
->get()
->groupBy(function($date) {
return Carbon::parse($date->created_at)->format('Y'); // grouping by years
//return Carbon::parse($date->created_at)->format('m'); // grouping by months
});
发布于 2015-05-19 18:03:09
这就是我是怎么做的。一个简短的示例,但使我的查询更易于管理
$visitorTraffic = PageView::where('created_at', '>=', \Carbon\Carbon::now->subMonth())
->groupBy(DB::raw('Date(created_at)'))
->orderBy('created_at', 'DESC')->get();
https://stackoverflow.com/questions/20603075
复制相似问题