【发布时间】:2021-10-03 00:02:01
【问题描述】:
我正在开发一个层次结构数据结构,我想在其中执行递归以获得所需的输出
id role_id reporting_to
------+-------------+-----------------
1 100 101
1 101 102
1 102 103
1 103 104
如果我将103 作为输入角色,我想得到以下输出
id role_id reporting_to
-----------+-------------+-----------------
1 100 101
1 101 102
1 102 103
输出应该是从输入到最后一个孩子。试过下面的例子,但它没有返回正确的输出
select id,role_id,reporting_to
from (select * from role_mapping order by reporting_to,id) rm_sorted,
(select @r:='103') initialisation
where find_in_set(reporting_to, @r)
and length(@r := concat(@r, ',', role_id))
【问题讨论】:
-
一般来说这不能作为查询来解决(或者它需要在一些数据限制,例如
CHECK role_id < reporting_to约束)。使用迭代存储过程。 -
您需要的递归深度是否有一些(小)限制?如果没有,您将需要使用存储过程(或者只是升级到 mysql 8 或 mariadb)
-
正如其他人所提到的,5.7 中的邻接表模型自然不适合递归。考虑升级或切换到嵌套集模型。
-
我认为只有迭代方法是可能的。谢谢大家。