【发布时间】:2020-05-26 23:36:47
【问题描述】:
我正在尝试按 time_ids 获取金额总和。我将以下 time_ids 作为数组传递。
雄辩的查询如下
$time_ids = [1, 2, 3, 4];
$amount = Data::selectRaw('ifnull(sum(amount),0) as amount')
->whereIn('time_ids', $time_ids)
->groupBy('time_ids')
->pluck('amount')
->toArray();
结果我得到了一个只有 3 个值的数组。
在我的数据库中,time_ids = 1 不会有任何值,但如果找不到任何值,我希望查询返回 0。
【问题讨论】:
-
这是左连接方案。从一个表中获取所有记录以及另一个表中匹配某些条件的记录(总和)。
-
@Erich,我尝试使用左连接但得到了相同的结果。我的查询如下。
Data::selectRaw('ifnull(sum(b.amount),0) as new_amount')->leftJoin('data as b', 'data.id', '=', 'b.id')->whereIn('data.time_ids',$time_ids)->groupBy('data.time_ids')->pluck('new_amount')->toArray(); -
您对
->toSql()的查询最后会产生什么结果?将其与类似问题中接受的答案进行比较,例如stackoverflow.com/a/18129785/4468423 -
@ahu-son 您的表数据应该包含带有
time_ids = 1的行,然后它将返回您期望的结果.. :) -
@UrjaSatodiya,我希望结果具有 time_ids 1(即我通过的所有时间 id)并且相应的总和为 0,即使数据库没有该特定 time_id 的任何值。有没有其他方法可以尝试实现这一目标?
标签: laravel laravel-query-builder