4

如何查询具有多个根的嵌套集模型,例如同一张表中的树?目前,我添加了一个名为“Root”的额外列,指示所有子树节点的根节点的 ID,但是,我无法弄清楚 sql 以正确的顺序检索它们

我指的是文章在 MySQL 中管理分层数据

通常,按顺序检索项目的查询是按左叶值的顺序,但是如果有多个根,您可能会一个接一个地得到多个“left:1”,这样就破坏了树。

我目前正在使用与 SQL 完全无关的解决方案。我在我的 C# 代码中重新安排了它们,但我只是想知道是否有办法用 SQL 来完成它,这样可以节省我在 Web 服务器上花费的时间

最后一个问题。如果我有一个过滤器,它会从树中过滤掉一些数据,你如何处理它?

  • 任务 1(进行中)
    • 任务 2(主动)
      • 任务 3(主动)

如果过滤器要显示所有状态为“活动”的树,你会怎么做?

4

1 回答 1

7

“多根”只是意味着您从第一级开始并完全省略了“真正的”根。所以,

根 1 (1, 4)
   节点 1 (2, 3)

 根 2 (5, 12)
   节点 21 (6, 7)
   节点 22 (8, 11)
     节点 221 (9, 10)

不要在左/右索引上重新启动序列;你会走进一个受伤的世界。

就您的过滤器问题而言,这纯粹是一个演示问题。有不同的方法来处理这个;我过去使用的一个是显示通向满足过滤条件的节点的路径中的所有节点,但以不同方式突出“过滤掉”节点并使它们不可操作(例如,不能在 UI 中选择,操作可以'不要对他们执行,等等......)。就像是:

任务 1(进行中)[灰显,不活动]
 +任务 2(主动)
  +任务 3(主动)

另一种方法是使用网格/树组合来显示过滤器结果,其中节点的路径显示为展平,但节点下的节点(如果有)显示为树。就像是:

任务 1 -> 任务 2(活动)
 + 任务 3(主动)
任务 1 -> 任务 4 -> 任务 6(活动)
 + 任务 7(主动)
于 2009-11-20T21:31:37.213 回答