我有一张代表家谱的表格。它有字段ID
, NAME
, LEVEL
, PARENT_ID
。
该列PARENT_ID
是外键,引用ID
该表的列。如何获取 仅知道特定人员行的所有(层次结构底部的任何级别)儿童的列表?ID
我需要在不使用存储过程调用的情况下在单个查询中获取它。请帮助把它做得最好。
例如,如果ID
是 7,那么结果应该是:
我使用 MySQL-5.1。
编辑:如果原始问题没有解决,也许当最高级别等于 5 时有解决方案?
编辑:不是一个完整的解决方案。执行技巧只遵循多个分支之一,并且无法交付多个孙分支。根据评论。在 SQLFiddle 的结果中也可以看到。
因此,SQLFiddle上的解决方案说明了 MySQL 中可以利用的一个有趣的执行黑客。
SELECT
@parent_id := id AS id,
parent_id,
name,
level,
@depth := @depth + 1 AS depth
FROM
family_tree t
join (SELECT @parent_id := 7, @depth := 0) f
WHERE id = @parent_id or parent_id = @parent_id ;
本质上,将您的 @parent_id 变量声明为您开始的根。连接子查询只执行一次。然后,当每一行重新定义@parent_id 时,where 子句被重新计算,并返回一个新行,它重新定义了@parent_id,循环继续,直到没有更多的行。