2009-12-05 85 views
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 

我需要按此順序遍歷該層次結構(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; 
} 

此公式僅適用於某些情況(節點標識1,3,5,2)。節點2的下一個節點應該是4

+0

您好, Pondidum。我已經更新了這個問題。 – matte 2009-12-05 22:00:08

回答

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 
+0

感謝rsp。其實,是的,id 4是一個單獨的樹。 Id 2是節點id 1的樹的最後一個節點。如果我請求id 2的下一個節點,它應該給我下一棵樹的第一個節點(節點id 4的樹)。 – matte 2009-12-05 22:05:59

+0

如何通過id排序可以幫助我?而且這不是一個功課:) – matte 2009-12-05 22:06:39

+0

由id訂購幫助問題的第一個版本,其中請求的訂單是1,2,3,4,5 :-) – rsp 2009-12-05 22:09:33