繁体   English   中英

GROUP CONCAT与mysql联接表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM