帖子、评论和回复的数据库架构设计

Gia*_*ini 7 mysql database schema

在我之前的项目中,我将帖子和评论作为两个表格:

邮政

  • ID
  • 文本
  • 时间戳
  • 用户身份

评论

  • ID
  • 信息
  • 时间戳
  • 用户身份
  • postid

现在我必须设计对评论的回复。回复只是一层,所以用户只能回复评论,不能回复。树结构只有 1 级深。我的第一个想法是对评论和回复使用相同的评论表。不过,我添加了一个新列:

评论

  • ID
  • 信息
  • 时间戳
  • 用户身份
  • postid
  • 家长评论

回复将 parentcommentid 设置为它们所属的父评论。父评论没有它(空)

检索给定帖子的评论很简单:

但这次我需要另一个查询来找出评论回复。必须为每个评论执行此操作:

这似乎不是一个好的解决方案,有没有办法让单个查询以正确的顺序返回完整的评论/回复列表?(由时间戳和嵌套决定)

小智 5

您可以使用连接并在单个查询中获得结果,如下所示:

  SELECT *, cc.message as replied_message 
    FROM `post` 
    JOIN comment as c 
      ON c.postid = post.id 
    JOIN comment as cc 
      ON cc.id = c.parentcommentid 
ORDER BY c.timestamp DESC, cc.timestamp DESC;
Run Code Online (Sandbox Code Playgroud)

请注意,只有 1 条评论只有 1 条回复时,它才能正常工作。此查询不支持单个评论的多个回复