laravel - 如何在 Laravel 中对三列进行分组?
问题描述
我有一个场景,首先我需要按唯一分组movie_id
,session_id
然后我需要按日期 [created_at] 分组。所以如果我有这个数据库结构:
movie_id | session_id | created_at
1 | 1 | 2021-05-11 16:02:41
2 | 1 | 2021-05-12 16:02:41
1 | 1 | 2021-05-11 16:02:41
1 | 1 | 2021-05-12 16:02:41
我需要这样的输出:
[{
"date": "2021-05-11",
"users": 1
},
{
"date": "2021-05-12",
"users": 2
}]
这是我到目前为止所尝试的:
$result = Activities::whereBetween('created_at', [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()])
->groupBy(['session_id', 'movie_id', 'date'])
->get(array(
DB::raw('Date(created_at) as date'),
DB::raw('COUNT(*) as "views"'),
));
但它正在返回这个:
[{
"date": "2021-05-11",
"views": 2
},
{
"date": "2021-05-12",
"views": 1
},
{
"date": "2021-05-12",
"views": 1
}]
我相信 groupBy 日期不起作用。有人可以提出更好的解决方案吗?
解决方案
首先,我在movie_id和session_id列上实现了group by ,然后按日期应用group by,如下所示:
$result = Activities::whereBetween('created_at', [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()])
->groupBy(['session_id', 'movie_id'])
->get(array(
DB::raw('Date(created_at) as date'),
DB::raw('COUNT(*) as "views"'),
));
$result = $result->groupBy('date');
推荐阅读
- reactjs - Rekit -React Bud 部署
- hibernate - 强制 Hibernate 将用户定义的方言与 Spring 引导自动配置一起使用
- wpf - WPF,如何根据其他的变化销毁和重新创建用户控件,以及绑定问题
- canvas - aframe 绘图组件不适用于新的 aframe 版本 0.8.2
- java - locationManager.getLastKnownLocation 在请求后返回 null
- c - 为什么我在 malloc 时遇到分段错误?
- batch-file - 如何创建文件夹并批量复制到其中
- image - 触发图像模态
- c++ - 我将如何优化此代码?
- jquery - 在数据表中显示空复选框而不是连字符