嵌套注释系统 sql


Nested comment system sql

我有一个我设计的注释系统,它没有任何嵌套即可工作。 现在我想允许人们直接回复评论,而不是该页面上的一般内容。 因此,我想在我的数据库中添加一个指向父 id 的父 id 列。

现在下一步(我很难找到解决这个问题的好方法)。就是根据所有注释的公共"事物 ID"查询数据库中的所有注释(嵌套和非嵌套),然后以正确的顺序显示它们,以便嵌套注释正确连接到它们的父项......有没有有效的方法将所有这些注释排序在一起,这样我就不必开始使用递归之类的奇怪的查询调用? 所有评论都有一个时间戳以及其他一些不相关的数据。

感谢您的任何建议

有一个概念叫做"嵌套集"。 基本上,每个评论和文章都有两列,指定其子项集的"开始"和"结束"。 每个注释都有一个完全在父项的集合内的开始和结束,并且同级之间没有重叠 - 两个集合重叠的唯一时间是当一个完全在另一个范围内时(即:如果一个项目是另一个项目的子项目)。

                                   Article
                             /-----(1, 12)----'
                       Comment                 Comment
                   /---(2, 5)               /--(6, 11)--'
             Comment                    Comment        Comment
             (3, 4)                     (7, 8)         (9, 10)

对特定项目执行查询时,会查找具有匹配文章 ID 的每个项目,其集位于项目的集合中。 这将检索所有子项,以及它们的所有子项,依此类推。 按开始或结束对它们进行排序,注释甚至应该主要按顺序显示 - 您可以与其他端点进行比较,以判断一个是否是另一个的子项。 (如果按开始排序,并且此项目的结束时间小于前一个项目的结束时间,则您有一个子项。

缺点是,每个评论都需要更新这些集。 这很简单,但可能非常慢。 为了在(7,8)下添加另一个项目,例如:

  • 对于该文章,通过添加 2 来更新每个"结束">= 8。
  • 对于该文章,通过添加 2 来更新每个"开始"> 8。
  • 插入新项目,并带有一组 (8, 9)。

当然,您在插入的注释之后"的评论越多,更新的速度就越慢。

坚持。。莱姆谷歌...

http://en.wikipedia.org/wiki/Nested_set_model