在同一张表中使用SQL递归查找父级。

3

如何找到所有项目的父ID(mySQL)?(可能有无限级别的层次结构...不是最好的设计,但这就是我正在使用的。)

ID      PARENTID    NAME
9146    NULL        thing1
9147    NULL        thing2
9148    9146        thing3
9149    9148        thing4
9150    NULL        thing5
9151    9149        thing6
9152    9147        thing7

输出应该是:
ID     REAL_PARENTID
9146   NULL (or self 9146)
9147   NULL (or self 9147)
9148   9146
9149   9146
9150   NULL (or self 9150)
9151   9146
9152   9147

你需要到达最顶层的父级,还是在层次结构中上一级的父级?没关系,我明白你需要到达顶部。 - BD.
1
这个问题的答案:http://stackoverflow.com/questions/3704130/recursive-mysql-query 对你应该有所帮助。 - user359040
你的例子不太清楚。从发布的数据来看,你似乎只需要执行 SELECT ID, PARENTID from table 这个语句,这就是全部。那问题出在哪里呢? - Marc Alff
@Marc 不完全正确,请看9149和9151的项目ID。REAL_PARENTID是不同的。 - monkey-wrench
哦,错过了。谢谢澄清。 - Marc Alff
1
@monkey-wrench,你能否设计它这样,当任何第一级子插入发生时,它将找到其最后的祖先并将其保存在“最老父母”列中?这样对于任何后续的子插入,你只需找到它们的直接父级并复制它们的“最老父母”列即可。 - cctan
2个回答

1

0

2
这是mysql... :) https://dev59.com/_XM_5IYBdhLWcg3waiiJ - Asken
以下是 MariaDB 的手册:https://mariadb.com/kb/en/recursive-common-table-expressions-overview/ - Lovor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接