Mysql 需要构造在同一个表中查找记录父项的查询吗?

Mysql 需要构造在同一个表中查找记录父项的查询吗?,mysql,sql,Mysql,Sql,我需要在单个表上构造一个查询。表结构和其中的一些虚拟数据如下 id | username | seniorid 1 | Superuser | -1 2 | user1 | 1 3 | user2 | 1 4 | user3 | 3 5 | user4 | 4 6 | user5 | 1 7 | user6 | 6 8 | user7 | 6 9 | user8 | 8 10 | user9 |

我需要在单个表上构造一个查询。表结构和其中的一些虚拟数据如下

id  | username  | seniorid
1   | Superuser |   -1
2   | user1 |    1
3   | user2 |    1
4   | user3 |    3
5   | user4 |    4
6   | user5 |    1
7   | user6 |    6
8   | user7 |    6
9   | user8 |    8
10  | user9 |    9
11  | user10    |    8
12  | user11    |    8
13  | user12    |    8
14  | user13    |    6
15  | user14    |    3
16  | user15    |    2
17  | user16    |    8
18  | user17    |    8
上表中只有一个超级用户。这将是在Hirarch的用户最高级别。此超级用户是唯一将seniorid设置为-1的用户。超级用户是所有用户的父用户。 在上表中,每个用户可能有也可能没有子用户。 表中提到了父用户和子用户之间的关系,所以seniorid中的数字只不过是另一个用户的id

例如:

考虑以下用户

id  | username  | seniorid
18  | user17    |    8
在上述情况下,seniorid为8,因此上述用户的家长为

8   | user7 |    6
其中,作为“user7”6的前辈ID,因此父级

6   | user5 |    1
通过这种方式进行回溯,我们将得到以下从“超级用户”到“用户17”的Hirachy列表

该雇佣制将具有高达n级的等级,即高达多个等级

我希望上面的Hirarch结果使用单个查询

我需要你的帮助来构造上面的查询。请任何人都能在mysql中给我这样的查询


我有一个用户的id、用户名、seniorid,我需要在一个查询中找到该用户的高级用户列表。这里,单个查询意味着其中可能有多个嵌套查询。但总的来说,它将作为一个查询启动。

好吧,如果不知道要检索多少个级别,就不能在一个查询中执行此操作

如果需要n级别,则查询如下所示:

SELECT * FROM users u 
LEFT JOIN users u1 on u1.id = u.seniorid
LEFT JOIN users u2 on u2.id = u1.seniorid
...
LEFT JOIN users u{n-1} on u{n-1}.id = u{n-2}.seniorid
WHERE u.id = 1
您可以定义层次结构级别的最大数量并生成这样的查询

如果你不能做到这一点,你将不得不链尽可能多的查询有水平

编辑:像这样:

<?php
    function addSeniors($id,&$array){
        $s = "SELECT * FROM users WHERE id = $id";
        $q = mysql_query($q);
        $results = array();
        while($r = mysql_fetch_assoc($q)){
            $array[]=$r;
            addSeniors($r('seniorid'),$array);
        }
    }

    $s = "SELECT * FROM users WHERE id = 1";
    $q = mysql_query($s);
    $results = array(mysql_fetch_assoc($q));

    addSeniors($r['seniorid'],$results);
?>


如果使用mysql,最好使用嵌套集来解决此问题。试着阅读这篇文章

这在MySQL中是不可能的,尽管如果您在查询中假设了一些最大的级别数,您可能可以绕过这个限制。@YegoshinMaxim谢谢您,先生!要回答在mysql或程序中在何处编写函数,请阅读一些关于在mysql中编写存储过程/函数的文章。然后您可以执行
loop
循环,在
seniorid
seniorid=-1
上迭代时停止,谢谢您!对于您的答复,但正如您所提到的,它不可能在单个查询中实现,我需要按照您所提到的构造查询。但在这方面,我不知道水平的深度。因此,我将无法构建您提到的查询。那么,对于这个问题,是否有其他解决方案,如数据库结构的更改或其他。
<?php
    function addSeniors($id,&$array){
        $s = "SELECT * FROM users WHERE id = $id";
        $q = mysql_query($q);
        $results = array();
        while($r = mysql_fetch_assoc($q)){
            $array[]=$r;
            addSeniors($r('seniorid'),$array);
        }
    }

    $s = "SELECT * FROM users WHERE id = 1";
    $q = mysql_query($s);
    $results = array(mysql_fetch_assoc($q));

    addSeniors($r['seniorid'],$results);
?>