2017-08-02 44 views
1

你好,我是新与laravel,我需要做的两个连接表三者之间则组由另一个表再算上加入组由结果与两个加入结果。我尝试用两个查询第一个为两个加入和第二个查询为组由但我不知道如何加入这两个查询。 这是我第一次查询三个表:会员,members_courses_assign和课程三个连接和GROUPBY LN laravel 5.4

$temp = DB::table('members') 
    ->join('members_courses_assign', 'members.externalPersonKey', '=', 'members_courses_assign.externalPersonKey') 
    ->join('courses', 'members_courses_assign.referenceNumber', '=', 'courses.referenceNumber')->where(['courses.termkey'=>$termK,'members_courses_assign.termkey'=>$termK])->get(); 

这是我的第二个查询

$count= DB::table('files') 
        ->select('referenceNumber', DB::raw('count(*) as total')) 
        ->where(['termkey'=>$termK]) 
        ->groupBy('referenceNumber') 
        ->get(); 

然后我需要加入第一与第二的结果,我尝试首先加入4表,但第四个表'文件'将不明确,因为'referenceNumber'在'文件'表中不是唯一的。

+0

'files'和其他表之间的关系是什么? – Maraboc

+0

还有就是如果我做一组由“referenceNumber”的“文件”表“referenceNumber”将是唯一的话,我可以加入“文件”表 – manal

回答

1

如果我明白你要做什么,使用join()和'count'子查询作为第一个参数,并传递一个Closure作为第二个参数指定主查询和子查询之间的链接。

$temp = DB::table('members') 
->join('members_courses_assign', 'members.externalPersonKey', '=', 'members_courses_assign.externalPersonKey') 
->join('courses', 'members_courses_assign.referenceNumber', '=', 'courses.referenceNumber') 
->join(DB::raw('(SELECT COUNT(*) AS count, referenceNumber FROM files WHERE termkey='.$termK.' GROUP BY referenceNumber) FileCount'), function($join) 
{ 
    $join->on('courses.referenceNumber', '=', 'FileCount.referenceNumber'); 
}) 
->where(['courses.termkey'=>$termK,'members_courses_assign.termkey'=>$termK]) 
->get(); 
+0

谢谢你这么多的其他表没有关系,这是工作! – manal