修改了预订树遍历 - 查找下一个节点

时间:2009-12-05 21:47:12

标签: php mysql algorithm mptt

我有这些数据:

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。

1 个答案:

答案 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