我有一个由 fk parentId 自引用的表。
给定一个 id,我需要提取它的所有子节点。
我知道该图正好具有三个级别:root、middleNode、leaf
所以我尝试了这个:
SELECT *
FROM table AS root
LEFT JOIN table AS middle
ON middle.parentId = root.id
LEFT JOIN table AS leaf
ON leaf.parentId = middle.id
WHERE root.id = 1
但这样我就没有为每个节点排...
此外,此实现没有考虑两件事:
- 它链接到3个级别的结构
- 在我看来,如果我在树的中间搜索,这似乎不是最好的解决方案
最佳答案
对于 3 个级别,你可以拥有它
SELECT * FROM
-- root
(
SELECT *
FROM your_table WHERE id = 1
) as root
UNION ALL
-- level1
(
SELECT * FROM your_table WHERE parentId = 1 )
)
UNION ALL
-- level2
(
SELECT * FROM your_table WHERE parentId IN (SELECT id FROM your_table WHERE parentId = 1 )
)
但对于更深的深度,我建议你实现常见的方法,例如嵌套集模型(需要添加额外的列),请take a look on this
关于mysql - 如何找到层次树中的所有子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48642230/