我正在努力创建一个查询来检索给定父 ID 的所有后代。 我有以下表结构:
menu_id | parent_id | title
1 0 Text 1
2 0 Text 2
3 2 Text 2.1
4 2 Text 2.2
5 2 Text 2.3
6 0 Text 3
7 6 Text 3.1
8 6 Text 3.2
9 6 Text 3.3
10 6 Text 3.4
11 10 Text 3.4.1
12 10 Text 3.4.2
13 10 Text 3.4.3
14 10 Text 3.4.4
对于给定的父 ID 6,我想实现以下结果:
menu_id
6
7
8
9
10
11
12
13
14
但是,我无法遍历所有后代,只能遍历第一个节点。 这是我到目前为止设法创建的查询:
SELECT T2.menu_id
FROM (
SELECT
@r AS _id,
(SELECT @r := menu_id FROM bo_admin_menu WHERE parent_id = _id) AS menu_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 6, @l := 0) vars,
bo_admin_menu h
WHERE @r <> 0) T1
JOIN bo_admin_menu T2
ON T1._id = T2.parent_id
ORDER BY T1.lvl DESC
谁能指出我正确的路径?
最佳答案
在您的情况下,为什么不在 title
列(忽略 parent
列)上使用 like
,如下所示:
select menu_id
from bo_admin_menu t2 join bo_admin_menu t1 on
t2.`title` like CONCAT(t1.title, '%')
where t1.menu_id = 6
order by t2.menu_id
关于php - MySQL 从给定的父 ID 检索完整的后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42727643/