如何最佳处理MySQL中的大型递归查询?

3
使用PHP和MySQL-
我有一个包含120,000名员工的列表。每个员工都有一个上级字段,其中包括上级员工编号。
我希望构建一个以树状格式显示员工的东西。如果您点击任何人,您将有一个下载选项,可以下载其下所有员工的信息。
因此,有两个问题 - 我应该编写处理查询的脚本(我已经有了但速度很慢),还是应该创建某种帮助表/视图?我正在寻找最佳实践。
另外,我确定这已经做了成千上万次。是否有一个好的类来处理组织层次结构?

你目前正在使用什么查询? - Alden W.
4
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ - Barmar
@Barmar 非常棒的一篇文章。感谢您提供的链接。 - blankip
我目前所编写的使用了邻接模型。我可以看出嵌套集可能会更快。这是真的吗?如果是,那么我如何从父级(主管ID)-子级(员工ID)转换为嵌套集?构建嵌套集实际上超出了我在mysql中所做的事情。 - blankip
1个回答

1

实现这一点的标准方法是使用一个表来存储所有员工,其中包含一个主键字段用于employee_id,以及一个supervisor_id字段,这是一个“自连接” - 意味着此字段中的值指向该员工的上级的员工ID。至于显示员工树-对于相对较小的树,可以在页面创建时将整个树结构发送到客户端浏览器,并且从存储的数据中单击节点时可以显示树节点。但是,对于较大的树,则最好在需要时获取数据,即单击节点时获取数据。如果您有12万名员工,则可能希望使用后者的方法。


目前它是这样设置的。我可以轻松获取直接下属,但如果有一个副总裁,可能会有6个级别以下,我至少需要打印出所有存在的选项。 - blankip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接