假設我們有一個包含用戶評論的表格。第一級評論提及他們所附的文章。更深層次的評論沒有設計這個參考,但他們有一個參考它的家長評論。從數據庫獲取節點樹以進一步呈現的最佳做法是什麼?
對於這個數據庫結構 - 什麼是最有效的方式來獲取給定文章的所有評論,然後以html格式呈現它? (假設我們有大約200條評論的第一層和最深層的20層)
假設我們有一個包含用戶評論的表格。第一級評論提及他們所附的文章。更深層次的評論沒有設計這個參考,但他們有一個參考它的家長評論。從數據庫獲取節點樹以進一步呈現的最佳做法是什麼?
對於這個數據庫結構 - 什麼是最有效的方式來獲取給定文章的所有評論,然後以html格式呈現它? (假設我們有大約200條評論的第一層和最深層的20層)
我通常會推薦一個叫做的設計閉合表。
見我的答案示例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中寫了一篇關於不同策略的章節。
對於最有效的方法Quassnoi已經寫了一系列關於這個問題的文章。
我建議你閱讀的第一篇文章和適應的例子與特定表的工作,但癥結是做一個可以遞歸r的函數你需要取回。你可能也想要水平(層次深度),所以第二篇文章可能也是相關的。
如果您需要對數據進行其他類型的查詢,其他文章可能會有用。他還有一篇文章Adjacency list vs. nested sets: MySQL,其中他比較了針對鄰接模型和嵌套集合模型的高度優化的查詢。
注意:您的標題要求「最佳實踐」,但您的問題要求「最有效的方式」。這些不一定相同。 – 2010-07-15 18:32:03