Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从两个级别查找子用户_Mysql_Sql - Fatal编程技术网

Mysql 从两个级别查找子用户

Mysql 从两个级别查找子用户,mysql,sql,Mysql,Sql,我有一个用户表,大多数用户都有一个列parent\u idset,它描述了他父母的id。根据这些信息,我想为当前用户生成一个表,以显示其所有子项,同时显示其所有子项(2个级别)。选择所有用户的子项是最基本的查询,但我不知道如何在一个查询中选择他们的子项,我尝试了不同类型的联合,但大多数结果都是空的或格式错误的,我对更复杂的SQL查询不是很有经验 我举了一个很小的例子。因此,我希望将用户“BBB”显示为“AAA”的子级,也显示为“CCC”,因为它是“AAA”的子级(当前用户)的子级 谢谢你的帮助

我有一个用户表,大多数用户都有一个列
parent\u id
set,它描述了他父母的id。根据这些信息,我想为当前用户生成一个表,以显示其所有子项,同时显示其所有子项(2个级别)。选择所有用户的子项是最基本的查询,但我不知道如何在一个查询中选择他们的子项,我尝试了不同类型的联合,但大多数结果都是空的或格式错误的,我对更复杂的SQL查询不是很有经验

我举了一个很小的例子。因此,我希望将用户“BBB”显示为“AAA”的子级,也显示为“CCC”,因为它是“AAA”的子级(当前用户)的子级

谢谢你的帮助

样本数据:

id  | nickname | parent_id
1   |   AAA    |   null
2   |   BBB    |    1
3   |   CCC    |    2
用户AAA的预期结果为:

id  | nickname | parent_id
2   |   BBB         1
3   |   CCC    |    2

根据您的描述,这可能会满足您的要求:

SELECT u.*
FROM users u
WHERE u.parentid = ?
UNION ALL
SELECT uc.*
FROM users u JOIN
     users uc
     ON uc.parentid = u.id
WHERE u.parentid = ?;

根据您的描述,这可能会满足您的要求:

SELECT u.*
FROM users u
WHERE u.parentid = ?
UNION ALL
SELECT uc.*
FROM users u JOIN
     users uc
     ON uc.parentid = u.id
WHERE u.parentid = ?;

通过表与查询用户id的交叉联接:

select u.* 
from users u cross join (select id from users where nickname = 'AAA') p
where u.parent_id = p.id
   or u.parent_id in (select id from users where parent_id = p.id) 
这样,您只需提供一次所查询用户的
昵称

请参阅。
结果:


通过表与查询用户id的交叉联接:

select u.* 
from users u cross join (select id from users where nickname = 'AAA') p
where u.parent_id = p.id
   or u.parent_id in (select id from users where parent_id = p.id) 
这样,您只需提供一次所查询用户的
昵称

请参阅。
结果:


问题中的示例数据和期望结果作为文本表会有很大帮助。抱歉,我编辑了问题中的示例数据和期望结果作为文本表会有很大帮助。抱歉,我编辑了感谢您的快速响应,这是一个魅力。感谢您的快速响应,这是一个魅力。