2

私には、多くの場所に割り当てることができ、すべての場所で 1 つの部門を担当する「マネージャー」がいます。このすべてを取得できるクエリが必要です。

http://sqlfiddle.com/#!2/33453c/1

上記の例 (リンク) では、各部門の従業員数を計算したことがわかります。

ManagersEmployeesはstaffという名前のテーブルにあります。クエリで manager レコードを取得したくありません。したがって、user_role = "従​​業員";

これをlaravelで生のクエリとして実行して、オブジェクトとして取得できるようにします。

$employees= DB::query('query goes in here')->get();

例として、staff_id '5' を持つマネージャーは、マネージャーが属するすべての場所と部門にいるすべての従業員を取得します。

私の推測は次のとおりです。

擬似

First Query SELECT ALL FROM staff, locations and departments where user_role = "employee"

Second Query SELECT ALL FROM staff, locations and departments where manager id=5

2 番目のクエリを満たさないが、両方のクエリを結合するすべての結果を削除しますか?

助けていただければ幸いです。

4

1 に答える 1

1

これがあなたの望むものだと思います。左 従業員の部門でマネージャーの部門に参加し、それらの各部門の「従業員」スタッフの数を取得します (0 の場合でも)

以下に、マネージャー #2 を示します (すべてのマネージャーを表示する場合は、where 句を削除し、マネージャー ID と部門 ID でグループ化できます)。

SELECT dept.name AS dept, loc.address1 AS loc, emp.*
FROM staff AS mgr
INNER JOIN department_staff AS mgr_dept
    ON mgr_dept.staff_id = mgr.staff_id
INNER JOIN departments AS dept
    ON mgr_dept.dept_id = dept.dept_id    
INNER JOIN location_staff AS mgr_loc
    ON mgr_loc.staff_id = mgr.staff_id
INNER JOIN locations AS loc
    ON mgr_loc.loc_id = loc.loc_id    
INNER JOIN (
  SELECT emp.*, dept.dept_id, loc.loc_id
  FROM staff AS emp
  INNER JOIN department_staff AS dept
    ON emp.staff_id = dept.staff_id
  INNER JOIN location_staff AS loc
    ON emp.staff_id = loc.staff_id
  WHERE emp.user_role = "Employee"
) AS emp
  ON emp.loc_id = mgr_loc.loc_id 
  AND emp.dept_id = mgr_dept.dept_id
WHERE mgr.staff_id = 2
于 2013-06-02T12:24:45.230 に答える