MYSQL QUERY多个表计数

时间:2017-03-07 14:36:59

标签: mysql laravel

我在构建查询时遇到问题,该查询根据该国某个特定地区(省)的法律分支划定律师人数。

我有四张桌子,一张是分支机构,一张是用户,另一张是律师在执业法律和地区分支机构之一。

我可以使用以下查询汇总所有这些信息:

 $lawyersbyprovince = DB::table('branchlawsubareas')
 ->leftJoin('lawyerbranches', function($join) {
     $join->on( 'branchlawsubareas.id', '=', 'lawyerbranches.subarea_id');
 })
 ->leftJoin('users', function($join) {
     $join->on( 'lawyerbranches.user_id', '=', 'users.id');
 })
 ->leftJoin('states', function($join) {
     $join->on('users.working_province', '=', 'states.id_state');
 })
 ->leftJoin('branchlaws', 'branchlawsubareas.area_id', '=', 'branchlaws.id')
 ->select('branchlawsubareas.name as subarea',
     DB::raw('count(lawyerbranches.subarea_id) as total'),
     'branchlawsubareas.id' 
 )
 ->where('states.id_state','=', $province)
 ->groupBy('branchlawsubareas.id')
 ->get();

此查询返回每个法律分支的律师人数,但不按省份划分。我花了足够的时间尝试一些事情但显然我错过了一些东西。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

尽量不要加入leftjoin的状态。

$lawyersbyprovince = DB::table('branchlawsubareas')
->leftJoin('lawyerbranches', 'branchlawsubareas.id', '=', 'lawyerbranches.subarea_id')
->leftJoin('users', 'lawyerbranches.user_id', '=', 'users.id')
->leftJoin('branchlaws', 'branchlawsubareas.area_id', '=', 'branchlaws.id')
->join('states', 'users.working_province', '=', 'states.id_state')
->where('states.id_state','=', $province)
->select('branchlawsubareas.name as subarea',
    DB::raw('count(lawyerbranches.subarea_id) as total'),
   'branchlawsubareas.id' 
)
->groupBy('branchlawsubareas.id')
->get();

现在如果这不起作用,你还有另外一种方法。删除where()子句并更改您的选择

...
->select(''branchlawsubareas.id', 'states.id as state_id')
...

这将返回包含所有数据的集合。然后你可以像这样操纵那个集合

$newCollection = $resultFromQuery->where('state_id', $province);
$newCollection->count(); //number of laywer in that state

我希望这会有所帮助,或者只是给你一个提示。