0

我有这个数据:

id | parent_id | lft | rgt | name
=====================================
1  | 0         | 1   | 8   | abc
2  | 3         | 5   | 6   | jkl
3  | 1         | 2   | 3   | def
4  | 0         | 9   | 10  | mnno
5  | 1         | 4   | 7   | ghi

我需要按以下顺序(id)遍历这个层次结构:1 > 3 > 5 > 2 > 4

我怎样才能做到这一点?

假设我想找到node_x的下一个节点。

if (node_x_rgt - node_x_lft == 1) {
    next_node_lft = node_x_rgt + 1;
} else {
    next_node_lft = node_x_lft + 1;
}

此公式仅在某些情况下有效(节点 ID 为 1、3、5、2)。节点 2 的下一个节点应该是 4。

4

1 回答 1

0

根据您提供的信息,我所能建议的就是尝试:

select * from table order by id

顺便说一句,id 4 的 lft 和 rgt 列在树之外,看起来像一个错误?

顺便说一句,如果这是家庭作业,请标记它。

编辑:问题的第 2 版:

这些类型的树(lft < rgt)对于所有节点都具有不变性。如果表仅包含 1 个根节点,则可以通过 lft 或 rgt 值检索序列,在这种情况下 lft 仍然可以解决问题(但通过 rgt 降序排列的替代方案不会):

select * from table order by lft
于 2009-12-05T22:01:51.287 回答