我有一个mysql表如下所示:
id | name | parent_id
19 | category1 | NULL
20 | category2 | 19
21 | category3 | 20
22 | category4 | 21如何编写递归mysql查询,将所有节点从输入节点提取到根节点。如果输入是category3,输出应该是category3、category2和category1
发布于 2019-11-25 05:26:13
我们可以尝试使用以下递归层次查询:
WITH RECURSIVE cte (id, name, parent_id) AS (
SELECT id,
name,
parent_id
FROM yourTable
WHERE parent_id IS NULL
UNION ALL
SELECT p.id,
p.name,
p.parent_id
FROM yourTable p
INNER JOIN cte
ON p.parent_id = cte.id
WHERE cte.name <> 'category3'
)
SELECT GROUP_CONCAT(name ORDER BY id DESC) AS names FROM cte;这一产出如下:
category3,category2,category1
这里的想法是缩短递归,使其在父节点为category3时停止。如果CTE的递归部分达到了这一点,这意味着它已经比category3级别低了一步,因此应该停止。
https://stackoverflow.com/questions/59025593
复制相似问题