我需要加入2个表来获取数据,我也需要使用SELECT GROUP CONCAT。我加入1个表时工作正常,但是当我尝试加入三个表时,值得重复。请建议。
下面是我的查询
$data = DB::table('festivals')
->join('namedesgs', 'festivals.id', '=', 'namedesgs.festival')
->join('vehicles', 'festivals.id', '=', 'vehicles.festival')
->select(DB::raw(" GROUP_CONCAT(vehicles.role SEPARATOR '\n') as role,GROUP_CONCAT(vehicles.size SEPARATOR '\n') as size,festivals.id,festivals.ref_no as ref_no, festivals.camping,festivals.tour_mgr_name,festivals.email,festivals.mobile,festivals.name_address, GROUP_CONCAT(namedesgs.name SEPARATOR '\n') as names,GROUP_CONCAT(namedesgs.designation SEPARATOR '\n') as designations"))
->groupBy('festivals.id')
->get();
答案 0 :(得分:1)
好像你的一个表有同一个festival.id的多个条目。 这导致你有同一festival.id的多行,最终你在group_concat中重复了一些项目。
首先检查我上面提到的是否应该真的发生。
如果应该尝试将DISTINCT
添加到您的群组:
$data = DB::table('festivals')
->join('namedesgs', 'festivals.id', '=', 'namedesgs.festival')
->join('vehicles', 'festivals.id', '=', 'vehicles.festival')
->select(DB::raw(" GROUP_CONCAT(DISTINCT vehicles.role SEPARATOR '\n') as role,GROUP_CONCAT(DISTINCT vehicles.size SEPARATOR '\n') as size,festivals.id,festivals.ref_no as ref_no, festivals.camping,festivals.tour_mgr_name,festivals.email,festivals.mobile,festivals.name_address, GROUP_CONCAT(DISTINCT namedesgs.name SEPARATOR '\n') as names,GROUP_CONCAT(DISTINCT namedesgs.designation SEPARATOR '\n') as designations"))
->groupBy('festivals.id')
->get();
答案 1 :(得分:0)
尝试使用leftjoin
$data = DB::table('festivals')
->leftjoin('namedesgs', 'festivals.id', '=', 'namedesgs.festival')
->leftjoin('vehicles', 'festivals.id', '=', 'vehicles.festival')
如果它仍未提供您期望的结果,请在此处详细了解不同的联接以及他们将为您提供的结果:What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?