如何将具有简单父子关系的mysql表转换为嵌套集?

时间:2013-07-23 20:30:15

标签: php mysql recursive-query nested-sets

我有一个很大的mysql表 - 基本上是一个稍微改变的LDAP转储。 120K员工。

这个表是很多东西所需要的,但我有一个任务是挂钩服务器 - 递归查询。每个员工都有这个角色。他们行上的ID和主管ID。容易父母的孩子关系。但是我们的应用程序之一是大量电子邮件应用程序。我们使用LDAP表搜索给定经理下的所有员工。那么这可能会深入6-10级,包括10-20K行。这很激烈。我当前的系统不适用于大型查询。

那么如何将父子关系自动化为嵌套集?这真的超出了我在mysql中所做的,所以任何帮助都表示赞赏。

这怎么没被问过100次?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我构建了一个完成这项工作的存储过程。这从一个主管ID开始,找到所有孩子和他们的孩子。小心一个循环关系!

假设: 员工表有PID(人)和SupID(主管)

Emailtable有PID,PersonName,Email,Nodelevel(int),空白。

调用Nodeup(1,SupervisorID)(参数IN 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