我的数据库中有一个表scans,其中记录了用户的扫描活动,并且用户一天可以进行多个活动。我正在寻找获取特定用户在几天内所有扫描的总和的最佳方法。我已经在代码中尝试了以下操作,但我想我遗漏了一些东西,因为我想聚合当天进行的用户的扫描。 DB::table('scans')->select(DB::raw('count(*) as total, scanner, created_at'))->where('scanner', 'Jon Snow')->groupBy('created_at')->get()=> Illuminate\Support\Collection {#3313 all: [ {#3304 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:43:58", }, {#3321 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:32:40", }, {#3327 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-28 19:44:18", }, {#3323 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-28 20:30:30", },所以代替这个: {#3304 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:32:58", }, {#3321 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:43:40", },我想要这个: {#3304 +"total": 2, +"scanner": "Jon Snow", +"created_at": "2020-07-26", }, {#3304 +"total": 5, +"scanner": "Jon Snow", +"created_at": "2020-07-28", },
1 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
问题:
目前您正在执行groupBy(created_at)。由于几乎所有扫描都有不同的日期时间,因此 groupBy 将无法按预期工作。
解决方案:
如果我理解正确的话,您需要按 create_at 的日期进行 groupBy 而不需要时间。为此,您必须仅选择日期时间列的日期部分。有两种方法可以做到这一点:
DB::raw('count(*) as total, DATE_FORMAT(created_at, "%Y-%m-%d") as someDate, scanner') ->where('scanner', 'Jon Snow') ->groupBy('someDate') ->get()
@编辑
你也可以这样做DATE(created_at) as someDate
例子:
我的数据库中插入了 4 个用户:
2 个已创建_at => '2020-05-05 10:10:10'
2 个已创建_at => '2020-10-10 10:10:10'
结果:
Illuminate\Support\Collection {#1945
#items: array:2 [
0 => {#1952
+"count": 2
+"new_date": "2020-05-05"
}
1 => {#2092
+"count": 2
+"new_date": "2020-10-10"
}
]
}
- 1 回答
- 0 关注
- 72 浏览
添加回答
举报
0/150
提交
取消