我有这些数据:
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
我需要按此顺序遍历此层次结构(ids):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。
答案 0 :(得分:0)
根据您提供的信息,我可以提出建议:
select * from table order by id
不过,id 4的lft和rgt列是否在树外,看起来像是错误?
btw2,如果这是作业,请将其标记为。
修改:问题的第2版:
这些树对于所有节点都具有(lft < rgt)
不变量。如果该表只包含1个根节点,则可以通过lft或rgt值检索序列,在这种情况下,lft仍然可以执行该操作(但是通过rgt以降序排序):
select * from table order by lft