我有一个大的mysql表,父子关系存储在嵌套集模型中(左右值)。
找到给定项目的所有子项很容易。
现在,我如何找到某个项目的深度。
行的示例:
Parent_ID,Taxon_ID,Taxon_Name,lft,rgt
for somerow(taxon_id)我想知道它与根节点的距离。
现在可能需要注意的是,我在数据结构中的方式是每个终端节点(没有子节点的节点)lft = rgt。我知道网上发布的很多例子都有rgt = lft +1,但我们决定不这样做只是为了方便。
要点: 嵌套集模型,需要找到给定节点的深度(到达根节点的数量)。
答案 0 :(得分:3)
我明白了。
基本上,您必须查询包含您要查找的节点的所有节点。例如,我正在查看一个lft = rgt = 7330的节点,我想要它的深度。我只需要
Select count(*)
from table
where lft<7330
AND rgt>7330
您可能希望在使用之前将1添加到结果中,因为它确实告诉您前面的代数而不是实际级别。但它有效且速度快!
答案 1 :(得分:0)
MySQL不支持递归查询。我相信PostgreSQL提供有限的支持,但它会效率低下而且杂乱无章。但是,没有理由不能以递归方式(即以编程方式)执行查询以获得所需结果。
如果“这个节点有多深?”这是一个经常需要回答的问题,您可以考虑调整表的模式,以便每个节点存储并保持其深度。然后你可以只读取该值而不是通过笨拙的递归来计算它。 (如果你正在改变表格,维护深度值可能会变得乏味,但假设你写的数量远远少于读取,这是一种更有效的方法。)