2009-01-11 55 views
3

我創建一個線程的留言板,我試圖保持它的簡單。有一個消息表,然後是一個具有'reply_id'字段的答覆表,該字段可以爲空以指示頂級響應或指示線程響應的值。mysql select - 如何檢索線程/嵌套消息的結果?

我有點困惑如何做這種類型的表雖然SELECT通話?

Reply 
-id (every reply gets a unique id) 
-message_id (the message it is replying to) 
-reply_id (the id of the reply it may be replying to - for threading) 
-reply 

我知道這可能是一個複雜的問題,尤其是對性能,但我真的只是尋找最基本解決了這一點。

感謝...

回答

1

您使用的存儲樹的天真「教科書」的方式,即存儲到直接父的引用。這種設計被稱爲鄰接表。還有其他的解決方案:

  • 路徑枚舉,在那裏你在樹編碼及其所有直系祖先字符串的每個節點存儲。
  • 嵌套集合,由喬·塞科一個聰明的做法,您使用的每個節點兩個數值來約束其所有後代。
  • 關閉表(或鄰接關係),在您使用一個單獨的表列出每一個祖先的後代對。

請參閱我對「What is the most efficient/elegant way to parse a flat table into a tree?」的回覆,以獲取關閉表設計的參考和示例。

+0

我喜歡的封閉表方法,以及。 – 2009-01-12 01:09:26