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

Ant*_*n N 6 mysql threaded-comments hierarchical-data

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

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

Bil*_*win 10

我通常推荐一种名为Closure Table的设计.

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

我还设计了这个演示文稿:使用SQL和PHP的分层数据模型.我开发了一个PHP应用程序,它在0.3秒内渲染一棵树,来自一组具有490k节点的分层数据.

我在这里写了关于闭包表的博客:使用闭包表渲染树.

我在书中写了一篇关于分层数据的不同策略的章节,SQL Antipatterns:避免数据库编程的陷阱.


Mar*_*ers 5

Quassnoi以最有效的方式撰写了一系列关于这一主题的文章.

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

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