我想了解根据我的方案选择应该如何。由于它有很多关系,我在方案中使用了绑定表。
现在,我的应用情况是:我想显示一些id
的车辆的所有维修。在我的函数中,我将id
存储在变量中,让我们说$id
所以我知道我希望看到所有修复的车辆,因此表vehicles
并不重要我需要这个选择的情况。
所以我想在repairs.vehicle_id = $id
。
一个修复行必须包含worker name
和surname
列。稍后,我有一个准备添加到维修中的零件表,但它与工作人员的情况相同,所以我现在只想了解,如何使用select
和{{joins
来编写group by
1}}和其他必要的sql函数来让工作人员进行修复。
当然,在一次修理中,可以有更多的工人。
表repair_worker
看起来像这样:
"repair_id" , "worker_id"
"86" , "2"
"87" , "3"
"87" , "4"
"88" , "1"
"88" , "2"
我正在使用Laravel框架,但我想只使用RAW SQL,如果可能的话,不使用laravel函数。
修改
$repairs = DB::select(DB::raw('
select r.id repair_id, w.name, w.surname
from repairs r
join repair_worker rw on r.id = rw.repair_id
join workers w on w.id = rw.worker_id
where r.vehicle_id = ?
group by w.name, w.surname, r.id
'),[$vehicle->id]);
答案 0 :(得分:0)
如果你只想要工人的名字,这应该有效:
select r.id repair_id, w.Name, w.SurName
from repairs r
join repair_worker rw on r.id = rw.repair_id
join workers w on w.id = rw.worker_id
where r.vehicle_id = $id
group by r.id, w.Name, w.SurName
要将修复放在一行中,并且所有工作人员都在一列中,您可以执行此操作:
select r.id repair_id, string_agg(w.Name || ' ' || w.SurName, ', ') workers
from repairs r
join repair_worker rw on r.id = rw.repair_id
join workers w on w.id = rw.worker_id
where r.vehicle_id = ?
group by r.id;