从MySQL表中检索帖子的前几条评论

时间:2013-05-06 15:12:27

标签: mysql facebook comments

您知道Facebook主页Feed如何列出所有最近的帖子吗?它显示发布的用户,他们的实际帖子,然后是该帖子附带的前几条评论。这就是我想要实现的目标,但我很难构建一个可以收集所有数据的查询。

我有3个表:用途,帖子和评论。每个都有一个唯一的ID,但它们引用彼此的ID。即,“注释”表包含已发布用户的user_id列以及所附帖子的post_id。

我正在查询SQL以收集所有帖子。我加入了我的用户和评论表,以了解海报的用户名以及帖子总共有多少评论,如下所示:

$query = "

        SELECT      `posts`.`id`,`posts`.`message`,`posts`.`link`,
                    `posts`.`posted`,`posts`.`category`,`posts`.`user_id`,
                    `users`.`username`,
                    count(`comments`.`id`)
        FROM        `posts`
        INNER JOIN  `users`
        ON          `posts`.`user_id`=`users`.`id`
        JOIN        `comments`
        ON          `comments`.`post_id`=`posts`.`id`
        WHERE       `posts`.`group_id` = '$id'
        AND         `posts`.`category`='$filter'
        GROUP BY    `posts`.`id`
        ORDER BY    `posts`.`posted`
        DESC

        ";

但我没有找到帖子中有多少评论,而是想阅读前几篇文章。有没有人能想到只用一个查询来实现这个目标的方法?

1 个答案:

答案 0 :(得分:0)

您可以将LIMIT子句用于“第一”帖子。通过将“第一个帖子”作为子查询然后加入评论,您可以在一个查询中获取所有内容。如果没有评论的帖子,评论应该保持联系。

注意:

  • 此查询未经测试,但应该关闭。

  • 这将获得前几个帖子的所有评论,因此您需要使用前端显示代码限制“每篇帖子最多3条评论”的显示。< / p>

  • 可以使用变量将此查询中的每个帖子的评论限制为3个,但这不是我知道该怎么做的。

以下是查询:

SELECT
  FirstPosts.id,
  FirstPosts.message,
  FirstPosts.link,
  FirstPosts.posted,
  FirstPosts.posts,
  FirstPosts.user_id,
  FirstPosts.username,
  comments.<< your comment column >>
FROM (
    SELECT      `posts`.`id`,`posts`.`message`,`posts`.`link`,
                `posts`.`posted`,`posts`.`category`,`posts`.`user_id`,
                `users`.`username`
      FROM        `posts`
      INNER JOIN  `users`
      ON          `posts`.`user_id`=`users`.`id`
      WHERE       `posts`.`group_id` = '$id'
      AND         `posts`.`category`='$filter'
      ORDER BY    `posts`.`posted` DESC
      LIMIT 20) FirstPosts
    LEFT JOIN comments ON FirstPosts.id = comments.post_id
ORDER BY FirstPosts.Posted, comments.<< column you use to determing comment order >>

如果您按日期或顺序确定评论顺序,则必须ORDER BY FirstPosts.Posted, comments.whatever DESC

希望这有帮助!