从数据库中获取节点树以进一步渲染的最佳实践是什么?

时间:2010-07-15 18:14:01

标签: mysql hierarchical-data threaded-comments

假设我们有一个包含用户评论的表格。第一级评论引用了他们所附的文章。更深层次的注释没有设计引用,但它们引用了它的父注释。

对于这个数据库结构 - 获取给定文章的所有评论然后以html格式呈现它的最有效方法是什么? (假设我们有大约200条第一级评论和最深层次的20条评论)

2 个答案:

答案 0 :(得分: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节点的分层数据集渲染树。

我在这里写了关于Closure Table的博客:Rendering Trees with Closure Table

我在本书SQL Antipatterns: Avoiding the Pitfalls of Database Programming中写了一篇关于分层数据的不同策略的章节。

答案 1 :(得分:5)

以最有效的方式Quassnoi撰写了一系列有关此主题的文章。

我建议您阅读第一篇文章并调整示例以使用您的特定表格,但关键是要创建一个可以递归您需要获取的行的函数。你可能也想要水平(层次深度),所以第二篇文章也可能也是相关的。

如果您需要对数据进行其他类型的查询,其他文章可能会有用。他还有一篇文章Adjacency list vs. nested sets: MySQL,其中他比较了邻接模型和嵌套集模型的高度优化查询。