【问题标题】:Using PHP/SQL, how do I store and retrieve comments stacked/nested under each other?使用 PHP/SQL,我如何存储和检索堆叠/嵌套的评论?
【发布时间】:2011-10-07 22:19:58
【问题描述】:

想象下面的公式:

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 方面相对较好,但这种情况正在递归地杀死我。有什么想法吗?

【问题讨论】:

    标签: php mysql sql database


    【解决方案1】:

    看起来这都是关于数据建模而不是 php 或 mysql。

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

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

    关于数据库模型,您只需要一个表 Comments ,其中包含您需要的任何信息以及一个名为 is_child_of 的字段。所以每条评论都会有一个父亲,但每条评论都在树的最高层。

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

    希望有帮助:)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 听起来不错,你能提供一个简单的例子吗?我从来没有这样做过。
      猜你喜欢
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 2014-08-28
      相关资源
      最近更新 更多