2015-04-16 53 views
0

我需要加入兩個表,同時總結和計算第二個表。 我已經完成了,但只有當行存在於第二個表中時。Laravel 4左加入哪裏是相等的或返回零

如果沒有任何東西,我想讓連接返回零,而不是停止顯示整行。

我確定我需要在uid = uid和gid = gid上加入左連接,但我不知道如何?

這是我的工作,但過濾太多代碼:

$result = Users_team::where('users_teams.gid', '=', $gid) 
         ->leftjoin('events_users', 'users_teams.uid', '=', 'events_users.uid') 
         ->where('events_users.gid', '=', $gid) 
         ->groupBy('users_teams.uid') 
         ->addSelect(array(
         '*', 
         DB::raw('count(*) as apps'), 
         DB::raw('SUM(goals) AS goals'), 
         DB::raw('SUM(assists) AS assists'), 
         DB::raw('SUM(award) AS awards'), 
         )); 
+0

而不是僅僅告訴我們你的SQL,可能你偶然向我們展示這兩個表中的數據的一個例子,以及你想什麼結果看起來像來自兩個表包含相同的數據?很難弄清楚你到底想要做什麼。 – user3158900

回答

0

因此,答案是不單獨做「其中」左內加入,從而有效地撤消它的「左」的一部分。

相反,應該在兩個條件下進行連接,如下所示。

$result = Users_team::where('users_teams.gid', '=', $gid) 
         ->leftJoin('events_users', function($join) 
          { 
           $join->on('users_teams.uid', '=', 'events_users.uid') 
           ->on('events_users.gid', '=', 'users_teams.gid'); 
          }) 
         ->groupBy('users_teams.uid') 
         ->addSelect(array(
         '*', 
         DB::raw('count(*) as apps'), 
         DB::raw('SUM(goals) AS goals'), 
         DB::raw('SUM(assists) AS assists'), 
         DB::raw('SUM(award) AS awards'), 
         ));