GROUP与mysql连接表连接

时间:2017-03-05 05:52:01

标签: php mysql laravel join

我需要加入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();

2 个答案:

答案 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?