我有一个很大的mysql表 - 基本上是一个稍微改变的LDAP转储。 120K员工。
这个表是很多东西所需要的,但我有一个任务是挂钩服务器 - 递归查询。每个员工都有这个角色。他们行上的ID和主管ID。容易父母的孩子关系。但是我们的应用程序之一是大量电子邮件应用程序。我们使用LDAP表搜索给定经理下的所有员工。那么这可能会深入6-10级,包括10-20K行。这很激烈。我当前的系统不适用于大型查询。
那么如何将父子关系自动化为嵌套集?这真的超出了我在mysql中所做的,所以任何帮助都表示赞赏。
这怎么没被问过100次?
答案 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