>我有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);
谢谢。