嵌套注释背后的算法是什么?

时间:2011-08-25 22:12:59

标签: php algorithm database-design commenting

我想学习Reddit背后的评论显示算法。如何评论与其孩子等有关?它们如何存储在数据库中?

让我们说

comment1
-comment2
--comment3
-comment4
--comment5
--comment6
---comment7
----comment8
comment9

如何显示在comment1之后的comment4之后的comment5?这个测序背后的想法是什么?以及如何在数据库中将它们联系起来?

3 个答案:

答案 0 :(得分:4)

它被称为层次结构。每条评论都没有父评论,或者有一条父评论。通过这种方式,您可以显示每个“顶级”评论(由于他们没有父评论),然后是每个评论等等。

对于comments表,数据库结构可能如下所示:

  • id字段标识单个评论,
  • parent_id被设置为父母的ID或未设置(设置为NULL或设置为0),
  • created - 评论创建的时间戳,
  • content - 实际评论内容,
  • 您需要的任何其他字段

答案 1 :(得分:3)

几乎@Rafe Kettler所说的 - 评论可以有父列。但是,如果您希望将更详细和深入的算法用作实施模式,请查看this message threading algorithm

答案 2 :(得分:3)

AS @Rafe说,实际存储非常简单,就像:

|  id  |   name   | parent |
|  1   | comment1 |    0   |
|  2   | comment2 |    1   |
|  3   | comment3 |    2   |
|  4   | comment4 |    1   |
|  5   | comment5 |    4   |
|  6   | comment6 |    4   |
|  7   | comment7 |    6   |
|  8   | comment8 |    7   |
|  9   | comment9 |    0   |

当然,实际上从中获取信息(可以说)是困难的部分。当然,您可以通过以下方式获得评论的孩子:SELECT * FROM table WHERE parent='4'将为您提供评论4的所有孩子。但计算孩子,按层次顺序列出所有孩子将会有点困难。其他答案可能会提供更多相关信息。

相关问题