php - 如何根据条件执行计数(*)作为总数

标签 php mysql sql laravel laravel-5.5

我正在使用 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/

相关文章:

sql - 如何使用 SQL 查询显示 Oracle 模式大小?

mysql - 具有相同 ID 的 2 个表的内部连接

php - 语法帮助! PHP 和 MYSQL

php - Magento - 在产品创建观察者之前获取商店 ID

php - 对于针对移动浏览器的 Web 应用程序,我应该使用 localStorage 而不是 cookies 吗?

mysql - 没有为登录选择数据库

php - 简单的出站链接跟踪器 - 为什么这不起作用?

mysql - 在连接/子选择中引用上一个表

mysql - 如何补偿 MySQL TIMESTAMPDIFF 溢出

c# - Oracle 存储过程适用于 ADO.NET,但使用 OrmLite 会引发异常?