如何查询具有多个根的嵌套集模型,例如同一个表中的树?目前,我添加了一个名为“Root”的额外列,表示所有子树节点的根节点的ID,但是,我无法找出sql以正确的顺序检索它们
我指的是文章Managing Hierarchical Data in MySQL。
通常,按顺序检索项目的查询是按左叶值的顺序,但是有多个根,你可以一个接一个地结束多个“left:1”,这样就打破了树。
我目前正在使用与SQL无关的解决方案。我将它们重新安排在我的C#代码中,但我只是想知道是否有办法用SQL来实现它,这样可以节省我在Web服务器上花费的时间
最后一个问题。如果我有一个过滤器,它从树中过滤掉一些数据,你如何处理它?
说
如果过滤器要显示状态为“活动”的所有树,您会怎么做?
答案 0 :(得分:7)
“多个根”只是意味着你从第一级开始并完全省略“真正的”根。所以,
Root1 (1, 4) Node1 (2, 3) Root2 (5, 12) Node21 (6, 7) Node22 (8, 11) Node221 (9, 10)
NOT 重启左/右索引上的序列;你会走进一个受伤的世界。
就您的过滤器问题而言,这纯粹是一个介绍问题。有不同的方法来处理这个问题;我过去使用的那个是在通向节点的路径中显示所有节点,这些节点满足您的过滤条件但突出显示“过滤掉”的节点并使它们不可操作(例如不能在UI中选择,无法对它们执行操作等...)。类似的东西:
Task 1 (In progress) [greyed out, inactive] +Task 2 (Active) +Task 3 (Active)
另一种方法是使用网格/树组合来显示过滤结果,其中节点的路径显示为扁平,但节点下的节点(如果有)显示为树。类似的东西:
Task1 -> Task 2 (Active) + Task 3 (Active) Task1 -> Task 4 -> Task 6 (Active) + Task 7 (Active)