Mysql 嵌套集深度
我有一个大型mysql表,其父子关系存储在嵌套的集合模型中(左值和右值) 它可以很容易地找到给定项目的所有子项 现在,我如何找到某个项目的深度 行的示例: 父项ID、分类单元ID、分类单元名称、lft、rgt 对于somerow(分类单元id),我想知道它离根节点有多远 现在,这里可能需要注意的是,我对数据进行结构化的方式是,每个终端节点(没有自己的子节点的节点)lft=rgt。我知道许多在线发布的示例都有rgt=lft+1,但我们决定不这样做只是为了方便 总结:Mysql 嵌套集深度,mysql,tree,nested-sets,depth,Mysql,Tree,Nested Sets,Depth,我有一个大型mysql表,其父子关系存储在嵌套的集合模型中(左值和右值) 它可以很容易地找到给定项目的所有子项 现在,我如何找到某个项目的深度 行的示例: 父项ID、分类单元ID、分类单元名称、lft、rgt 对于somerow(分类单元id),我想知道它离根节点有多远 现在,这里可能需要注意的是,我对数据进行结构化的方式是,每个终端节点(没有自己的子节点的节点)lft=rgt。我知道许多在线发布的示例都有rgt=lft+1,但我们决定不这样做只是为了方便 总结: 嵌套集模型,需要找到给定节点的
嵌套集模型,需要找到给定节点的深度(到达根的节点数) MySQL不支持递归查询。我相信PostgreSQL提供的支持是有限的,但它将效率低下且混乱不堪。但是,没有理由不能以递归方式(即编程方式)执行查询以获得所需的结果
如果“这个节点有多深?”是一个经常需要回答的问题,你可以考虑调整表的模式,以便每个节点存储和维护它的深度。然后,您可以读取该值,而不是使用笨拙的递归计算它。(如果您正在洗牌表,则深度值的维护可能会变得单调乏味,但假设您所做的写操作远远少于读操作,这是一种更有效的方法。)
我找到了答案 实际上,您必须查询包含您正在查找的节点的所有节点。例如,我看到一个节点的lft=rgt=7330,我想知道它的深度。我只是需要Select count(*)
from table
where lft<7330
AND rgt>7330
选择计数(*)
从桌子上
lft7330在哪里
在使用结果之前,您可能希望将1添加到结果中,因为它实际上告诉您之前的代数,而不是实际级别。但是,它的工作和它的速度 应该有一种非递归的方法来检索节点的深度。