2017-04-30 50 views
0

我一直在尋找大約3個小時爲一個解決方案,但還沒有找到的東西,實際上對我的作品(一切使用CTE,但我讀了MySQL不支持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返回直接和間接地在他手下的員工數量。

e.g:員工ID 1將返回7

計數e.g:員工ID 3將返回5

我如何去了解這個計數? 我只是不明白爲什麼這是如此複雜。 感謝提前:)

+0

的可能的複製[SQL查詢來獲取每個管理者在員工的遞歸數(http://stackoverflow.com/questions/19690325/SQL查詢到獲得-遞歸計數的 - 員工 - 下 - 每個經理) – Jocelyn

+0

我認爲它在MySQL中是不可能的,如果有在層次結構的級別沒有限制。 有幾個帖子談論它,搜索「MySQL的heirarchical查詢」 –

+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 

是緩慢的,但工程...

+0

OMFG它像魔術一樣工作!你不知道我現在有多愛你,你救了我的屁股!非常感謝!! :) – EpicSyntax