【发布时间】:2019-10-14 03:31:07
【问题描述】:
基本上我需要根据 cityId 和 postCode 在需要提供一些详细信息的地方显示报告。
所以如果 cityId 为 NULL 并且 postCode 为 NULL 那么这些记录的计数应该在 data1 之下。
同样, - 当 cityId IN (123, 456) THEN 这些记录的计数应该在“data2”中 - 当 cityId 在 (789, 999) THEN 'data3' - 当 cityId 在 (111, 222) THEN 'data4' - ELSE 'data5'
我在这里有 2 个查询:
- 将此 sql 转换为 laravel eloquent/querybuilder 方式。
- 最后提到的条件
计数(当 cityId 不为 NULL 且 cityId 不在 (123, 456, 789, 999, 111, 222) 然后 1 ELSE NULL END )作为 \"data5\" 来自客户 ")
必须是上述所有条件的 else 部分。
我已经尝试过了,但无法达到预期的效果
$result = Customer::select(Customer::raw("SELECT
COUNT(CASE WHEN cityId IS NULL AND postCode IS NULL then 1 ELSE NULL END) as \"data1\",
COUNT(CASE WHEN cityId IN (123, 456) then 1 ELSE NULL END) as \"data2\",
COUNT(CASE WHEN cityId IN (789,999) then 1 ELSE NULL END) as \"data3\",
COUNT(CASE WHEN cityId IN (111, 222) then 1 ELSE NULL END) as \"data4\",
COUNT(CASE WHEN cityId IS NOT NULL AND cityId NOT IN (123, 456, 789, 999, 111, 222) then 1 ELSE NULL END ) as \"data5\"
from trial
"))->get();
期望的结果: 数据1:7 数据2:5 数据3:12 数据4:10 数据5:1
【问题讨论】:
-
你的结构对我来说有点不清楚,但你可能会想要使用 Laravel 关系之类的东西:
Customer::whereHas('transaction', function($query) { $query->whereNotNull('tsid')->whereNotIn('afid', [123, 456, 789, 999, 111, 222]); } -
@ceejayoz 我已经更新了我的查询以便更好地理解
标签: laravel postgresql eloquent laravel-query-builder