使用PHP / SQL,如何存储和检索彼此堆叠/嵌套的注释?

时间:2011-10-07 22:19:58

标签: php mysql sql database

想象一下以下的章程:

Comment ID 1
|
|--- Comment ID 2 (reply to ID 1)
     |
     |--- Comment ID 3 (reply to ID 2)
     |
     |--- Comment ID 4 (reply to ID 2)
          |
          |--- Comment ID 5 (reply to ID 4)

(example in action)

如何将上述内容存储到SQL中以便以后检索和列出?

我在PHP / SQL方面相对较好,但是这种情况递归地杀了我的脑袋。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以将数据存储为nested set。这是在SQL表中表示树状数据的一种非常常见的方式。

答案 1 :(得分:1)

看起来这就是数据模型,而不是php或mysql。

您可以将其表示为树结构。只要认为评论只需要一个父母。每个评论,一个父母。但是树中的第一个项目(根元素)将没有父项

因此,要在OOP中对此进行建模,您将使用将自己关联的类Comment,该关系的名称将为is_child_of。其中一个将具有空值。如果您想进一步了解此解决方案,请查看Composite pattern;)

关于数据库模型,您只需要一个表,它将包含您需要的任何内容以及一个名为is_child_of的字段。因此,每个评论都会有一个父亲,但每个评论都会在树的最高层进行评论。

由于评论有一个订单,(在你的例子中交换评论3和4不一样)你应该考虑到你必须以某种方式对它们进行排序(如果它是增量值,则为ID)或日期时间。)

希望有所帮助:)