首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用mysql获取用户的最高层次数据?

如何使用mysql获取用户的最高层次数据?
EN

Stack Overflow用户
提问于 2018-07-22 23:03:37
回答 1查看 98关注 0票数 0

你好,

我的数据库表结构如下。

代码语言:javascript
复制
TableName:- UserTable

id | empName | reportsTo
-----------------------
1  | XYZ     | -
2  | ABC     | 1
3  | MNP     | 2
4  | IJK     | 3
5  | PQR     | 4
6  | DEF     | 3
7  | STU     | 2

如何获取他在最高层次中报告的用户的详细信息。

例如:当我选择id为7的用户时,输出应该是

代码语言:javascript
复制
id    empName  reportsTo
2     ABC      1
1     XYZ      -

同样,当我选择id为6的用户时,它应该返回id的3,2,1的数据。

EN

回答 1

Stack Overflow用户

发布于 2018-07-22 23:45:06

我认为你不理解我发布的可能的重复链接,所以这里是发布的解决方案,并进行了一些微不足道的调整以适合您的数据。

代码语言:javascript
复制
drop table if exists usertable;
create table usertable(id int, empName varchar(3), reportsTo int);
insert into usertable values
(1  , 'XYZ'     , null),
(2  , 'ABC'     , 1),
(3  , 'MNP'     , 2),
(4  , 'IJK'     , 3),
(5  , 'PQR'     , 4),
(6  , 'DEF'     , 3),
(7  , 'STU'     , 2);

SELECT T2.id, T2.empname,t2.reportsto
FROM (
    SELECT
        @r AS _id,
        (SELECT @r := reportsto FROM usertable WHERE id = _id) AS parent_id,
        @l := @l + 1 AS lvl
    FROM
        (SELECT @r := 7, @l := 0) vars,
        usertable h
    WHERE @r <> 0) T1
JOIN usertable T2
ON T1._id = T2.id
where t2.id <> 7
ORDER BY T1.lvl;

+------+---------+-----------+
| id   | empname | reportsto |
+------+---------+-----------+
|    2 | ABC     |         1 |
|    1 | XYZ     |      NULL |
+------+---------+-----------+
2 rows in set (0.03 sec)

和id 6

代码语言:javascript
复制
SELECT T2.id, T2.empname,t2.reportsto
FROM (
    SELECT
        @r AS _id,
        (SELECT @r := reportsto FROM usertable WHERE id = _id) AS parent_id,
        @l := @l + 1 AS lvl
    FROM
        (SELECT @r := 6, @l := 0) vars,
        usertable h
    WHERE @r <> 0) T1
JOIN usertable T2
ON T1._id = T2.id
where t2.id <> 6
ORDER BY T1.lvl; 

+------+---------+-----------+
| id   | empname | reportsto |
+------+---------+-----------+
|    3 | MNP     |         2 |
|    2 | ABC     |         1 |
|    1 | XYZ     |      NULL |
+------+---------+-----------+
3 rows in set (0.00 sec)

注意,我已经将id为1的reportsto从-改为null。只有当report to小于id时才有效,否则您将不得不认真考虑您的数据结构。

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

https://stackoverflow.com/questions/51466384

复制
相关文章

相似问题

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