[英]GROUP concat with mysql join tables
我需要加入2个表以获取数据,同时也使用SELECT GROUP CONCAT。 我加入1个表时工作正常,但是当我尝试加入3个表时,值重复出现。 请指教 。
以下是我的查询
$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();
似乎您的一张桌子有多个相同的Festival.id条目。 这导致您在同一个Festival.id中有多行,并最终在group_concat中有重复项。
因此,首先检查我上面提到的内容是否应该真实发生。
如果应该,则尝试将DISTINCT
添加到您的群组concat中:
$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();
尝试一下leftjoin
$data = DB::table('festivals')
->leftjoin('namedesgs', 'festivals.id', '=', 'namedesgs.festival')
->leftjoin('vehicles', 'festivals.id', '=', 'vehicles.festival')
如果仍然不能提供您期望的结果,请在此处详细了解不同的联接,以及它们将为您提供的结果: INNER JOIN,LEFT JOIN,RIGHT JOIN和FULL JOIN有什么区别?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.