假设我们有一个包含用户评论的表格。第一级评论引用了他们所附的文章。更深层次的注释没有设计引用,但它们引用了它的父注释。
对于这个数据库结构 - 获取给定文章的所有评论然后以html格式呈现它的最有效方法是什么? (假设我们有大约200条第一级评论和最深层次的20条评论)
答案 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,其中他比较了邻接模型和嵌套集模型的高度优化查询。