7

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

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

4

2 回答 2

10

我通常推荐一种叫做Closure Table的设计。

请参阅我对将平面表解析为树的最有效/优雅的方法是什么的回答中的示例?

我还设计了这个演示文稿: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》中写了一章关于分层数据的不同策略。

于 2010-07-15T18:25:09.350 回答
5

对于最有效的方式,Quassnoi写了一系列关于这个主题的文章。

我建议您阅读第一篇文章并调整示例以使用您的特定表,但关键是创建一个可以递归您需要获取的行的函数。您可能还需要级别(层次结构的深度),因此第二篇文章可能也很相关。

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

于 2010-07-15T18:18:15.693 回答