2017-03-07 6 views
0

私は、国の特定の地域(州)で法律の執行機関によって弁護士の数を限定するクエリの作成に問題があります。MYSQL QUERY複数テーブル数

私は4つのテーブルを持っていますが、1つはブランチオフィスで、1つはユーザー向けのもので、1つは弁護士が支店と支店の支店を追加する場所です。

私は次のクエリですべての情報を要約することができる午前:

$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(); 

このクエリでは、法律の枝あたりの弁護士の数を返しますが、それは州によって区切るされません。私は物事を試すのに十分な時間を費やしましたが、明らかに何かが欠けています

ご協力いただければ幸いです。

答えて

0

代わりに左結合の状態に参加しないようにしてください。

$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 

のように、そのコレクションを操作することができます。

+0

最後に、私がしたことは2つのクエリでした。これらの2つをdiffKeysと比較し、新しいコレクションを操作して目的の結果を得るが、このアプローチは効率的ではない。今まで見つかった解決法は非常に非効率的であるため、誰かが適切な回答を見つけるまで質問を開いたままにします。 – lostintheriver

+0

元の質問にテーブルの図(イメージ)を追加できますか?テーブルを視覚化する方が簡単です。 – EddyTheDove

関連する問題