2010-06-10 51 views
1

在MySQL中,我有一棵樹使用鄰接列表模型來表示。選擇由mysql中的鄰接列表模型表示的任意深度的樹?

MYTREE 
    id 
    parent_id 
    title 

我很納悶:

給定一個節點的ID,有沒有什麼方法來選擇beneathe該節點的整個樹,完成與深度信息?樹是任意深的,所以我不能說有多少層可能。但是,結果集可能是這個樣子:

ID  TITLE  DEPTH 
4  title1 1 
8  title2 2 
16  title8 3 
9  title3 2 
15  title4 3 

我知道這是可以做到這一點使用嵌套集模型。但是有一些關於嵌套集的東西並不理想,我希望不必切換。

感謝您的建議!

回答

0

編輯:我沒有注意到在標題中任意深度的條款:

你可以寫一個存儲過程遞歸在行。

但是什麼是不理想的嵌套集(至少不能由插入前觸發器或存儲過程的照顧)?

+1

對樹的修改 - 就像增加一個節點一樣 - 爲大量的行重寫左值和右值。我關心可伸縮性。 – Travis 2010-06-10 19:22:57

+0

很高興聽到你已經成功地使用嵌套集,在這麼多的負載下。我的要求並沒有那麼重。 – Travis 2010-06-10 19:48:13

0

簡答題:沒有。

遍歷用父指針表示的樹的唯一方法是在下一個後面跟隨一組父ID。如果你可以限制深度,那麼通過簡單地加入整個表就可以實現這種深度,但是無限的深度,應用程序端循環通常是一種可行的方法。

+0

父母/孩子不是存儲分層數據的唯一方法...嵌套集合模型在這方面的工作非常靈活.. – 2010-06-10 19:19:46

+0

特拉維斯承認,在原來的職位。我特別談到是否可以用父指針完成的問題。 – VoteyDisciple 2010-06-10 19:27:40