Php MySQL从给定的父ID检索完整的子体

Php MySQL从给定的父ID检索完整的子体,php,mysql,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

我正在努力创建一个查询来检索给定父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,我希望实现以下结果:

但是,我不能遍历所有的子代,而是遍历第一个节点。。 这是我迄今为止设法创建的查询:

    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  

有人能给我指出正确的路径吗?

在您的情况下,为什么不在标题列上使用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

该表只是实际数据库的一个示例,因此它可能是父id 200。。数字本身无关紧要,但要求是一样的,为给定节点获取所有子代和子代。你已经发现MySQL不支持递归。选项包括编写存储过程、根据需要将表连接到自身、在应用程序级代码中处理逻辑或切换到不同的模型(例如嵌套集)。虽然在你的特殊情况下,你也可以选择一条物质化的路径,你如何从一个较高的节点传递到另一个较低的节点?我明白了,你实际上是在永久地获取标题。。标题没有保留这些名称。我没有真正遍历继承权,我只是使用标题列,假设父项的标题是“文本3”,例如,我只是用标题像“文本3%”进行查询,返回3、3.1等等。好的,也许你应该修改这个问题。不清楚你是否不能依赖它。我担心在MySQL中,如果递归的深度是无限的,就没有很好的解决方案。其他数据库(如Oracle和SQLServer)具有分层查询功能。但是这个问题已经被问过了,请检查这里:
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