2015-11-03 91 views
1

我一直在处理这种情况3天...有人可能会为我提供一个解决方案,以便在下面创建查询报告。查询在laravel上连接3个表

我有3个表:

applicants 
-id 
-user_id 
-name 
-province_id 

applications 
-id 
-user_id 
-university_id 

provinces 
-id 
-province_name 

我查询的目标是每个省对高校提供全面的申请人。下面是该查询

list universities table

下面的表格是我对MySQL查询:

select provinces.province_name, count(applicants.id) from provinces left join applicants on provinces.id = applicants.province_id join applications on applications.user_id = applicants.user_id-- where applications.university_id = 1 group by provinces.id; 

这是我的雄辩:

$output = DB::table('provinces') 
    ->select(['provinces.province_name', DB::raw('count(applicants.id) as total'), 'provinces.id']) 
    ->leftJoin('applicants', 'provinces.id','=', 'applicants.province_id') 
    ->leftJoin('applications', 'applications.user_id','=','applicants.user_id') 
    ->where('university_id',$id) 
    ->groupBy('provinces.id') 
    ->get(); 

这是样品当前查询:

enter image description here

这是我的期望:

enter image description here

请给出了答案无论是在MySQL或雄辩。谢谢!

回答

1

使用' - > leftJoin()'方法?似乎是完全能够做你从它的外观要什么的:)

http://laravel.com/docs/master/queries#joins

+0

我用同样的办法。但是当我根据university_id添加的时候,数据并没有显示该省是否没有大学,相反,他们仅在count> 0的时候才列出该省。 – indi60

+0

是的,是的,因为那么您的第一次选择如果该省没有大学,则返回NULL。现在的方式只有在找到一些数据时才会起作用。如果你把这个NULL变成0,它应该可以工作:) –

+0

你能否详细说明你的语句“把NULL变成0? – indi60