2017-08-01 171 views
1

我正在努力讓拉拉維爾的主子女,伯爵(小孩)和所有主生,與groupby。下面是表格記錄和laravel代碼。Laravel完全加入groupby並計數

父表

+-------------+------------+ 
    | Id   | Name  | 
    +-------------+------------+ 
    | 1   | a   | 
    +-------------+------------+  
    | 2   | b   | 
    +-------------+------------+ 
    | 3   | c   | 
    +-------------+------------+ 

子表

+-------------+------------+ 
    | parent_Id | Code  | 
    +-------------+------------+ 
    | 1   | d1   | 
    +-------------+------------+ 
    | 1   | d1   | 
    +-------------+------------+  
    | 1   | d1   | 
    +-------------+------------+ 
    | 1   | d1   | 
    +-------------+------------+  
    | 2   | d2   | 
    +-------------+------------+ 
    | 2   | d3   | 
    +-------------+------------+ 

結果 數都相同父兒童ID和顯示所有主標識,如果孩子不具有主ID比0

+-------------+----------------------+ 
    |countparentIds in child| parentName  
    +-------------+----------------------+ 
    | 6      | a   | 
    +-------------+----------------------+ 
    | 2      | b   | 
    +-------------+----------------------+ 
    | 0      | c   | 
    +-------------+----------------------+ 

現在我的laravel雄辯就像下面。

$master = DB::table('parents') 
     ->select(array('parent.name as Name', DB::raw('COUNT(child.parent_id) as countparentids'))) 
     ->join('child', 'parent.id', '=', 'child.parent_id', 'left outer') 
     ->where(child.code,'d1') 
     ->orderBy('parent.name') 
     ->groupBy('parent.id') 
     ->groupBy('parent.name') 
     ->get(); 

現在我得到了結果,父表所有行,並計數具有父ID的子。

+1

什麼是你的問題? –

+0

結果不顯示所有的父行,它顯示的是子計數但不是所有的父行,我正在查找所有的父名,countofchild_parentid。 – Muhabutti

+0

因爲instanc子表的代碼= d1,所以結果應該是child = 4中的第一行countparentids,parentname = child = 0中的countparentids,parentname = b在child = 0中countparentid,parentname = c – Muhabutti

回答

0

嘗試用CASE WHEN
像這樣

$ter = DB::table('parents') 
    ->leftjoin('child', 'parent.id', '=', 'child.parent_id') 
    ->select(array('parent.name as Name', DB::raw('CASE WHEN (child.code= "d1") THEN COUNT(child.parent_id) ELSE 0 END as countparentids'))) 
    ->orderBy('parent.name') 
    ->groupBy('parent.name') 
    ->get(); 
+0

@Muhabutti嘗試這一個它會爲你工作 –

+0

我的代碼是leftjoin連接('table','parent.column','=','''''''''''')。 – Muhabutti

+0

好的,這是正確的,你需要給出你的地方條件的基礎上的案件 –