我有一张如下表所示。
parentid uid
10001 10001
10001 10002
10001 10003
10002 10004
10004 10005
10003 10006
10005 10007
我需要在此单个表中的行之间建立父子关系。
我需要以相反的顺序获取父级直到4级。例如,最后一条记录为 uid 10007 , parentid为10005 。现在 uid 10005 的父母 10004 且 10004 的父母 10002 且 10002 的父母 10001 。
我正在使用MySQL,所以递归似乎是不可能的。我有哪些选项以及如何解决这个多层次问题。我使用PHP / MySQL。
先谢谢你们。
答案 0 :(得分:2)
由于你有4级有限,你不应该需要递归(尽管能够使用例如MS SQL CTE是很方便的。)
类似的东西:
SELECT
t4.uid as child,
--t3.uid as parent,
--t2.uid as grand_parent,
--t1.uid as great_grand_parent,
t1.parentid as great_great_grand_parent
FROM
your_table_name t1
inner join your_table_name t2
on t2.parentid = t1.uid
inner join your_table_name t3
on t3.parentid = t2.uid
inner join your_table_name t4
on t4.parentid = t3.uin
where
t4.uid = '10007' -- your start node.
如果您需要为多个节点执行此操作,则需要将其连接到选择起始节点的内容,或者将上述WHERE t4.uid = '10007'
子句替换为WHERE t4.uid IN (SELECT DISTINCT uid FROM your_table_name)
这是徒手做的,所以为拼写错误道歉。