2016-05-25 9 views
0

クエリに渡された上位emp_idの従業員の合計数を検索しました。MySQL parent_idを渡すとツリー内のすべての子を取得するクエリ

例:EMP_ID 1のために彼は部下として「2,3,4,5」を持つと下は再び EMP_ID 3のためにそこに「6,7」でありreportessと再び下にある EMP_ID 6がある「8,9 'は報告者であり、もう一度は emp_id 9報告者があります。' 10 '

これで、manger_id' 1 'をクエリに渡すと、9人の社員をすべて取得する必要があります。

以下は私のクエリです.1人の従業員の下に40人の従業員がいる場合は機能しません。私のテーブル構造で

SELECT manager_id,emp_id FROM users ,(SELECT @head := 2) head 
    WHERE FIND_IN_SET(manager_id, @head) > 0 AND @head := CONCAT(@head, "," , emp_id) ORDER BY manager_id 

ごとに、MANAGER_ID列はどちらか助けてMySQLの機能のMySQLのクエリにしてください

をEMP_IDがあります。

答えて

0

再帰クエリを意味しますか?

そうならば、あなたはこの文書を読むことができます:SQLで木:Nested Sets and Materialized Path

この方法では、同じデータを取得するために使用するテーブル構造あり、ツリーデータを取得するためにクエリを使用していません。クエリは簡単です。

0

以下のクエリを検索してください。あなたは "初期化"部分にハードコードされたマネージャーID値を入れることも、変数を渡すこともできます。

select EmpID, 
     ManagerID 
from (select ManagerID, EmpID from employee 
     order by ManagerID, EmpID) employee_sorted, 
     (select @pv := '1') initialization 
where find_in_set(ManagerID, @pv) > 0 
and  @pv := concat(@pv, ',', EmpID) 
+0

これは私が質問に投稿したクエリですが、報告者が35を超えるシナリオでは機能しません。 – user93068

関連する問題