首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要构造查询来查找同一表中记录的父项吗?

问需要构造查询来查找同一表中记录的父项吗?
EN

Stack Overflow用户
提问于 2012-10-03 19:54:49
回答 2查看 124关注 0票数 0

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

代码语言:javascript
复制
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

在上表中,只有一个超级用户。这将在用户的层次结构中处于顶层。此超级用户是惟一具有-1的seniorid的用户。超级用户是所有用户的父级。在上表中,每个用户可能有也可能没有子用户。表中提到了父用户和子用户之间的关系,使得高级用户中的数字只是另一个用户的id。

例如:

考虑以下用户

代码语言:javascript
复制
id  | username  | seniorid
18  | user17    |    8

在上面情况下,seniorid是8,因此上面用户的父级是

代码语言:javascript
复制
8   | user7 |    6

其中,作为"user7“6的高级对象,因此父对象是

代码语言:javascript
复制
6   | user5 |    1

通过这种方式回溯,我们将得到以下从“超级用户”到"user17“的层次结构列表。

代码语言:javascript
复制
id  | username  | seniorid
1   | Superuser |   -1
6   | user5 |    1
8   | user7 |    6
18  | user17    |    8

此层次结构将具有最多n个级别,即多个级别

我想上面的层次结构的结果使用单一查询。

我需要你的帮助来构建上面的查询。请任何人可以给我这样的查询在mysql。

我有id,username,seniorid的用户,我需要在一个查询中找到他的高级用户列表。在这里,单个查询意味着它可能包含多个嵌套查询。但作为一个整体,它将作为单个查询触发。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-03 20:03:29

AFAIK,如果您不知道要检索多少个级别,则不能在单个查询中执行此操作。

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

代码语言:javascript
复制
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

您可以定义最大层级数并生成这样的查询。

如果你不能做到这一点,你将不得不链接和级别一样多的查询……

编辑:如下所示:

代码语言:javascript
复制
<?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);
?>
票数 0
EN

Stack Overflow用户

发布于 2012-10-03 20:21:35

如果您使用的是mysql,那么最好使用嵌套集合来解决这个问题。尝试读取此http://www.fliquidstudios.com/2008/12/23/nested-set-in-mysql/

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

https://stackoverflow.com/questions/12707955

复制
相关文章

相似问题

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