2013-07-23 19 views
0

我有一個很大的mysql表 - 基本上是一個略有改變的LDAP轉儲。 120K員工。如何將一個簡單的父子關係的mysql錶轉換爲嵌套集?

該表需要很多東西,但我有一個任務掛鉤服務器 - 遞歸查詢。每個員工都有這個僱主。 ID和主管ID在他們的行。容易的父母子女關係。然而,我們有一個應用程序是一個羣發電子郵件應用程序。我們使用LDAP表搜索給定經理下的所有員工。那麼這可能會達到6-10級的深度,包括10-20K行。這是激烈的。我目前的系統不適用於大型查詢。

那麼,我該如何將父子關係自動化爲嵌套集?這實際上超出了我在mysql中完成的任何幫助。

又是怎麼沒被問過100次呢?

回答

0

我建了一個存儲過程,沒有工作。這從一個主管ID開始,找到所有的孩子和他們的孩子。謹防循環關係!

假設: Employee表中有PID(人)和SupID(主管)

Emailtable具有PID,PERSONNAME,電子郵件,Nodelevel(INT),開始是空的。

呼叫Nodeup(1,SupervisorID)(參數CURNODE INT,IN supid INT)

BEGIN 
#Routine body goes here... 
declare newnode int; 
if curnode = 1 then 
insert emailtable (pid,personname,email,nodelevel) select pid,personname,email,1 from employees where pid = superid; 
end if; 

insert emailtable(personname,pid,email,nodelevel) select personname,pid,email,curnode+1 
     from employees where supid in (select pid from emailtable where curnode = emailtable.nodelevel); 
    set newnode = (select max(nodelevel) from emailtable); 
    if newnode > curnode then 
     call nodeup(Newnode,0); 
    end if; 
END 
相關問題