The*_*hun 6 php sql eloquent laravel-5
我正在尝试按月和年分组我的数据.
$data ->select(DB::raw('count(id) as `data`'),DB::raw('YEAR(created_at) year, MONTH(created_at) month'))
->groupby('year','month')
->get();
Run Code Online (Sandbox Code Playgroud)
输出是:
{
"data": 19215,
"year": 2016,
"month": 10
},
Run Code Online (Sandbox Code Playgroud)
如果我只按月分组,我不知道哪个年份属于这个月,我的预期输出是:
{
"clicks": 19215,
"month": 11-2016,
},
{
"clicks": 11215,
"month": 12-2016,
Run Code Online (Sandbox Code Playgroud)
},
我想在sql中,而不是在PHP中.
Ami*_*pta 14
您可以尝试:
->select(DB::raw('count(id) as `data`'), DB::raw("DATE_FORMAT(created_at, '%m-%Y') new_date"), DB::raw('YEAR(created_at) year, MONTH(created_at) month'))
->groupby('year','month')
->get();
Run Code Online (Sandbox Code Playgroud)
如果要按年份对结果进行分组,则可以使用闭包,将日期时间解析为所需的格式(年或月)。
这是代码示例:
$res= ModelName::where('someColumn','test')
->get()
->groupBy(function($val) {
return Carbon::parse($val->created_at)->format('Y');
});
Run Code Online (Sandbox Code Playgroud)
小智 8
$result = ModelName::selectRaw('year(created_at) year, monthname(created_at) month, count(*) data')
->groupBy('year', 'month')
->orderBy('year', 'desc')
->get();
Run Code Online (Sandbox Code Playgroud)
对于最新版本的 mysql,接受的答案将给出错误,因此请尝试
$data
->selectRaw("
count(id) AS data,
DATE_FORMAT(created_at, '%Y-%m') AS new_date,
YEAR(created_at) AS year,
MONTH(created_at) AS month
")
->groupBy('new_date')
->get();
Run Code Online (Sandbox Code Playgroud)
参考: https: //dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format
| 归档时间: |
|
| 查看次数: |
22600 次 |
| 最近记录: |