我正在使用 Laravel 5.5,我想在一个条件下执行 SQL 查询 count(*) as total
- 如果 http_response 等于 0,那么它应该将总值设置为0,而不是目前的 1。
http_response created_at session_id website_id
404 2018-03-03 17:20:18 2018-03-03 17:15:40-BaC-2 2
404 2018-03-03 17:20:18 2018-03-03 17:15:40-BaC-2 2
404 2018-03-03 17:20:18 2018-03-03 17:15:40-BaC-2 2
0 2018-02-27 14:21:14 2018-02-27 14:19:32-T6f-2 2
404 2018-02-28 14:21:14 2018-02-28 14:19:32-T6f-2 2
我的 Laravel 查询看起来如何(如果确实需要,我可以尝试获取与此查询等效的原始 SQL 查询):
brokenlink::withTrashed()
->whereBetween('created_at', [$range['from'], $range['to']])
->orderBy('created_at', 'asc')
->where('website_id', $website_id)
->select('created_at', DB::raw('count(*) as total'))
->groupBy('session_id')
->get();
我得到的结果:
03/03/2018 : 3
27/02/2018 : 1
28/02/2018 : 1
期望的结果:
03/03/2018 : 3
27/02/2018 : 0
28/02/2018 : 1
最佳答案
使用case-when
brokenlink::withTrashed()
...
->select('created_at', DB::raw('CASE WHEN http_response =0 THEN 0 ELSE count(*) END as total'))
->groupBy('session_id')
->get();
关于php - 如何根据条件执行计数(*)作为总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49088434/