![](/img/trans.png)
[英]How to populating Modified Preorder Tree Traversal data into Java tree object?
[英]Database: Sorting hierarchical data (Modified Preorder Tree Traversal): How to retrieve immediate children
正如您所发现的,这在MPTT设计中并不那么容易。 你知道如何得到所有的后代:
SELECT * FROM tree WHERE lft BETWEEN 2 AND 11;
你需要的是没有祖先的后代集合,这些祖先也是你正在开始的父节点的后代。
SELECT * FROM tree t1 WHERE t1.lft BETWEEN 2 AND 11
AND NOT EXISTS (SELECT * FROM tree t2 WHERE t2.lft > 2 AND t2.lft < 11
AND t1.lft > t2.lft AND t1.rgt < t2.rgt);
除了lft和rgt值之外,您还可以存储每个孩子的父ID。 这样做的一个好处是,如果您的lft和rgt值搞砸了,您可以重新生成树。 它还允许您直接确定父节点的直接子节点。
得到了相同的要求,这将是一种更简单的方式
select * from tree t1
where t1.nodeleft > 1
and 1 in (select count(*) from tree where tree.nodeleft < t1.nodeleft and tree.noderight > t1.noderight)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.