2017-04-30 10 views
0

解決方法は約3時間ありましたが、実際には私のために働くものは見つかりませんでした(すべてがCTEを使用していますが、 CTE)。MySQLで再帰的にマネージャーの従業員数を取得

私はそうのようなmanager <> employee関係の階層を含む従業員のテーブルを持っている:

+----+-----------+-----------+ 
| id | managerID | name | 
+----+-----------+-----------+ 
| 1 |   0 | Joe  | 
| 2 |   1 | Melissa | 
| 3 |   1 | Simmons | 
| 4 |   3 | Clarke | 
| 5 |   4 | Lola  | 
| 6 |   4 | Britney | 
| 7 |   3 | Suzi  | 
| 8 |   4 | Dali Lama | 
+----+-----------+-----------+ 

私は彼の下で、直接および間接的に従業員の数を返します。従業員のidを取るクエリーを必要としています。

例えば:従業員ID 1

7の数を返します。例えば:従業員ID 35私はこれについて移動するにはどうすればよい

の数を返しますか? 私はちょうどなぜこれがとても複雑であるか分かりません。事前に 感謝:)

+0

可能な複製を作品(http://stackoverflow.com/questions/19690325/sql-query-to-get-recursive-of-employees-under-each-manager) – Jocelyn

+0

階層構造のレベルに制限がない場合、MySQLでは不可能だと思います。 「MySQLの階層型クエリ」を検索して、いくつかの投稿があります。 –

+0

このロジックにはストアドプロシージャを使用するか、データ構造を変更して各行に完全な階層構造を持たせる必要があります。 –

答えて

3
select max(cnt) 
    from (
    select @ids:=(
      select group_concat(id) 
       from empTab 
       where find_in_set(managerID,@ids)>0 
     ), 
      @cnt:[email protected]+(select count(1) 
         from empTab 
         where find_in_set(id,@ids)>0) as cnt 
    from empTab E, 
      (select @cnt:=0,@ids:=3) X -- <--- @ids is starting ID for search 
    limit 6 -- <-- set limit to maximal Tree nesting level or more 
) X 

は遅いですが、[各マネージャの下で従業員の再帰カウントを取得するSQLクエリ]の...

+0

OMFGは魔法のように機能します!あなたは今あなたをどれほど愛しているのか分かりません。どうもありがとう!! :) – EpicSyntax

関連する問題