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)
这样,您只需提供一次所查询用户的昵称。
请参阅。
结果:
问题中的示例数据和期望结果作为文本表会有很大帮助。抱歉,我编辑了问题中的示例数据和期望结果作为文本表会有很大帮助。抱歉,我编辑了感谢您的快速响应,这是一个魅力。感谢您的快速响应,这是一个魅力。