php - MySQL 从给定的父 ID 检索完整的后代

标签 php mysql

我正在努力创建一个查询来检索给定父 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/

相关文章:

mysql - sql 获取具有最大日期和相对 id 记录的行

mysql - 如何从我的 MySQL 数据库中获取数据到 Zoho Books。?

php - 从 PHP 数组中删除第一个值

php - 具有两个操作的提交按钮

php - fatal error : Call to undefined function http_get()

php - 从数据库中的 URL 选择特定的子域

mysql - 找到另一列中只有一个值的那些行?

javascript - 如何使用 filepond 插件、ajax 和 php,在服务器上未检测到文件名

php - 固化 "Back Button Blues"

mysql - 显着增加 varchar 字段的长度是否会影响性能?