0

我有一个大的 mysql 表 - 基本上是一个稍微改变的 LDAP 转储。12 万名员工。

很多事情都需要该表,但我有一项任务是与服务器挂钩 - 递归查询。每个员工都有 emp。id 和主管 id 在他们的行上。轻松的亲子关系。然而,我们拥有的应用程序之一是群发电子邮件应用程序。我们使用 LDAP 表来搜索给定经理下的所有员工。好吧,这可能会深入 6-10 层,包括 10-20K 行。这是激烈的。我当前的系统不适用于大型查询。

那么如何将父子关系自动化到嵌套集中呢?这确实超出了我在 mysql 中所做的工作,因此感谢您提供任何帮助。

另外,这怎么没有被问过 100 次?

4

2 回答 2

0

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

假设:Employee表有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
于 2013-07-23T22:45:55.887 回答
0

你可能想看看这篇文章:

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

于 2013-07-23T20:35:13.260 回答