首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为mysql中的经理获取员工层次结构?

如何为mysql中的经理获取员工层次结构?
EN

Stack Overflow用户
提问于 2012-06-15 13:23:21
回答 2查看 4.5K关注 0票数 3

我有一个employee表,包含以下数据。对于特定的经理,我希望得到所有员工的列表,遵循经理的层次结构。

代码语言:javascript
复制
id  name    manager

1   John    6
2   Gill    7
3   Ben     2
4   Roy     8
5   Lenin   6
6   Nancy   7
7   Sam     0
8   Dolly   3

例如,我必须让经理Sam(7)领导员工。如您所见,Sam没有任何经理,但他是雇员GillNancy的经理,他们分别是雇员BenJohn,LeninE 213的经理。

所以我运行了一个这样的查询:

代码语言:javascript
复制
select * from employee where manager=7;

我得到的结果是2行,Gill和Nancy。

但是现在,我还想在输出中向员工展示Ben和John,Lenin,因为他们都在管理器Gill和NancyE 228下,他们都在E 129SamE 230下。

如何构造查询以分层显示经理的员工?换句话说,如何才能在经理E 141SamE 242下显示所有Gill、Nancy、Ben、John和LeninE 240

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-15 13:26:38

在WHERE子句中添加IN子查询将处理这个问题。例如:

代码语言:javascript
复制
SELECT * FROM employee WHERE manager = 7 OR manager IN (SELECT id FROM employee WHERE manager = 7)
票数 2
EN

Stack Overflow用户

发布于 2012-06-15 13:43:42

为了获得更好的视觉效果,还可以使用以下查询:

代码语言:javascript
复制
select e1.name, e2.name, e3.name 
from employee e1 
left join employee e2 on e1.id = e2.manager
left join employee e3 on e2.id = e3.manager
where e2.manager = 7

然而,您必须为每个层次结构添加另一个left join。这一方面是一个缺点,另一方面,它比肖恩的答案更容易处理。

从正面看,您可以得到这样的输出:

代码语言:javascript
复制
name        name1       name2
---------------------------------
Sam         Gill        Ben     
Sam         Nancy       John    
Sam         Nancy       Lenin   

这是更友好的眼睛,你可以很容易地把它放在一个更友好的形式,通过PHP或其他。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11051506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档