MySQL查询父子关系
Posted
技术标签:
【中文标题】MySQL查询父子关系【英文标题】:MySQL Query for Parent Child relationship 【发布时间】:2013-01-04 07:34:34 【问题描述】:我想编写一个选择查询来获取从子到父的完整路径:
| Unique Id | Child Code | Parent Code |
| X | 9 | 7 |
| Y | 7 | 6 |
| Z | 6 | 5 |
| A | 5 | NULL |
| B | 11 | 33 |
| C | 33 | 22 |
| D | 22 | NULL |
如果选择的代码为 9,则查询应返回其所有父级作为结果:9-7-6-5....
如果选择的代码是 11,那么查询应该返回:11-33-22....
谢谢。
【问题讨论】:
你必须使用递归存储过程。试试吧,它会为你工作 这篇文章有帮助吗:mikehillyer.com/articles/managing-hierarchical-data-in-mysql 其实我只是想通过查询来实现它。 如果你不想多次使用存储过程查询直到你得到一个空值 可能重复 ::***.com/questions/11064913/… 【参考方案1】:试试这个查询
SELECT *
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_code FROM mytable WHERE unique_id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 9, @l := 0) vars,
mytable m
WHERE @r <> 0) T1
JOIN mytable T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC;
【讨论】:
【参考方案2】:带有NULL
父值:
SELECT *
FROM <table_name>
ORDER BY COALESCE(<parent_id>,<id>), <id>), category_parent_id IS NOT NULL
带有ZERO
父值:
SELECT *
FROM <table_name>
ORDER BY COALESCE((SELECT NULLIF(<parent_id>,0)), <id>), NULLIF(<parent_id>,0) IS NOT NULL
【讨论】:
以上是关于MySQL查询父子关系的主要内容,如果未能解决你的问题,请参考以下文章