2010-07-15 24 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,其中他比较了针对邻接模型和嵌套集合模型的高度优化的查询。

相关问题