按当前 ID 列出的另一个表中的成本总和



>我有4个表:

"汽车"表,其中每辆车都有一个 ID。

保存操作的

"操作"表已在汽车上完成。

| ID  | CarID | Operation | User | JournalID |
| --- | ----- | --------- | ---- | --------- |

记录操作成本和其他日常支出的"交易"表,其中每个操作有 2 个事务,一个是> 0,另一个是 <0(例如:+100 和 -100(:

| ID  | Account | JournalID | Amount | Date |
| --- | ------- | --------- | ------ | ---- |

记录日常财务的"日记"表:

| ID  | Amount | Date |
| --- | ------ | ---- |

我想要的是知道特定汽车的运营成本总和amount,我循环遍历该汽车的所有操作,然后循环每个日记行的总和,这当然会导致糟糕的结果。

在这种情况下,我该怎么做才能尽快获得结果?

注意:列的所有名称均为小写

您需要像这样基于外键连接三个表,并且通过一些选择和原始查询,您可以获得问题的解决方案。

DB::table('cars')->join('operations','cars.id','operations.car_id')
                 ->join('journal','journal.id','operations.journal_id')
                 ->select(DB::raw('SUM(amount) as total_cost'),'cars.*')
                 ->groupBy('cars.id')
                 ->get();

我最终解决了@Segar的答案:

$result = DB::table('cars')
                 ->join('operations','cars.id','operations.car_id')
                 ->join('journal','journal.id','operations.journal')
                 ->join('transactions','transactions.journal','operations.journal')->where('transactions.type', 0)
                 ->select(DB::raw('SUM(amount) as total_cost'),'cars.*')
                 ->groupBy('cars.id')
                 ->get();
print_r($result);

谢谢。

最新更新