0

我有一个我设计的评论系统,它可以在没有任何嵌套的情况下工作。现在我想让人们直接回复评论,而不是该页面上的一般内容。所以我考虑在我的数据库中添加一个指向父 id 的父 id 列。

现在下一步(我有问题找到解决此问题的好方法)。是根据共同的“事物ID”查询所有评论(嵌套和非嵌套)的数据库,然后以正确的顺序显示它们,以便嵌套评论正确连接到他们的父母......有没有什么有效的方法将所有这些评论排序在一起,这样我就不必开始使用递归和其他东西进行奇怪的查询调用?所有评论还带有时间戳以及其他一些不相关的数据。

感谢您的任何建议

4

1 回答 1

3

有一个概念叫做“嵌套集”。基本上,每条评论和文章都有两列,指定其子项集的“开始”和“结束”。每个评论都有一个完全在父项的集合内的开始和结束,并且兄弟之间没有重叠——两组重叠的唯一时间是当一个完全在另一个内时(即:如果一个项目是另一个)。

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

当您对特定项目进行查询时,您会查找具有匹配文章 ID 的每个项目,其集合在您的项目集合中。这会检索所有的孩子,以及他们所有的孩子,等等。按开始或结束对它们进行排序,评论甚至应该按顺序出现——您可以与另一个端点进行比较,以确定一个是否是另一个的子项。(如果你已经按开始排序,并且这个项目的结束小于前一个,那么你有一个子项目。)

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

  • 对于那篇文章,通过添加 2 来更新每个 'end' >= 8。
  • 对于那篇文章,通过添加 2 来更新每个“开始”> 8。
  • 插入带有一组 (8, 9) 的新项目。

当然,您插入的评论“之后”的评论越多,更新速度就越慢。

等等……让我谷歌……

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

于 2012-08-16T07:05:47.897 回答