2010-07-15 25 views
6

假設我們有一個包含用戶評論的表格。第一級評論提及他們所附的文章。更深層次的評論沒有設計這個參考,但他們有一個參考它的家長評論。從數據庫獲取節點樹以進一步呈現的最佳做法是什麼?

對於這個數據庫結構 - 什麼是最有效的方式來獲取給定文章的所有評論,然後以html格式呈現它? (假設我們有大約200條評論的第一層和最深層的20層)

+0

注意:您的標題要求「最佳實踐」,但您的問題要求「最有效的方式」。這些不一定相同。 – 2010-07-15 18:32:03

回答

9

我通常會推薦一個叫做的設計閉合表

見我的答案示例What is the most efficient/elegant way to parse a flat table into a tree?

我還設計了這個演示:Models for Hierarchical Data with SQL and PHP。我開發了一個PHP應用程序,它可以在0.3秒內從490k節點的分層數據集合中渲染一棵樹。

我在這裏寫了關於閉合表的文章:Rendering Trees with Closure Table

我在本書SQL Antipatterns: Avoiding the Pitfalls of Database Programming中寫了一篇關於不同策略的章節。

5

對於最有效的方法Quassnoi已經寫了一系列關於這個問題的文章。

我建議你閱讀的第一篇文章和適應的例子與特定表的工作,但癥結是做一個可以遞歸r的函數你需要取回。你可能也想要水平(層次深度),所以第二篇文章可能也是相關的。

如果您需要對數據進行其他類型的查詢,其他文章可能會有用。他還有一篇文章Adjacency list vs. nested sets: MySQL,其中他比較了針對鄰接模型和嵌套集合模型的高度優化的查詢。

相關問題