Mysql查询以获取包含最近评论的帖子-包括评论计数

Mysql查询以获取包含最近评论的帖子-包括评论计数,mysql,sql,Mysql,Sql,我需要 获取过去15天内有人发表评论的帖子 按注释计数排序 返回帖子id以及相关帖子的评论总数 这就是我所拥有的: SELECT post.id, COUNT(DISTINCT postcomments.id) as comments FROM posts LEFT JOIN postcomments on postcomments.postid = post.id WHERE postcomment.posted_at >= DATE_SUB(NOW(), INTERVAL 15 DAY

我需要

  • 获取过去15天内有人发表评论的帖子
  • 按注释计数排序
  • 返回帖子id以及相关帖子的评论总数
  • 这就是我所拥有的:

    SELECT post.id, COUNT(DISTINCT postcomments.id) as comments
    FROM posts
    LEFT JOIN postcomments on postcomments.postid = post.id
    WHERE postcomment.posted_at >= DATE_SUB(NOW(), INTERVAL 15 DAY)
    GROUP BY post.id
    HAVING comments > 0
    ORDER BY comments DESC
    

    我的查询的问题是,我的评论计数只包括过去15天内发表的评论,而我想要的是这些帖子的评论总数。如何在一个查询中实现这一点?

    也许您希望在此处使用条件聚合:

    选择
    p、 身份证,
    作为注释的总和(pc.posted_at>=DATE_SUB(现在(),间隔15天))
    从邮政p
    在pc上左连接后命令pc.postid=p.id
    分组
    p、 身份证
    有
    计数(*)>0
    订购人
    评论说明;
    

    comments
    计数应该仍然和以前一样,只是现在我们断言了评论的总数,而不仅仅是断言过去15天内的评论。

    @TimBiegeleisen我不这么认为。他们只想要在过去15天内有评论的帖子,但这些帖子的所有评论总数。@TimBiegeleisen OP直接说:“而我想要这些帖子的评论总数。”。根据
    where
    条款,它应该受到最近发表评论的帖子的限制
    MAX
    正在获取最新的
    posted\u值。您的病情在15天内,因此
    MAX(posted\u at)>=DATE\u SUB(NOW(),INTERVAL 15 DAY)
    正在检查
    post.id
    上次发布日期是否在15天内。如果移动
    MAX
    并仅在
    处简单地发布
    具有
    将返回错误,因为
    选择中未指定该列。如果将
    张贴在
    列中的
    放入
    选择
    ,也会出现错误,因为它不在
    组中。如果您将
    posted_放置在
    分组依据中,您将得到不同的结果。如果您查看fiddle中的最后一个查询(我上面的评论),我已经在
    posted\u at
    列上添加了
    GROUP\u CONCAT
    ,列出了与
    post.id
    对应的所有日期;按升序日期排序。我还在
    SELECT
    中添加了
    MAX(posted_at)
    ,这样您就可以看到最后的发布日期了。由于
    MAX(posted\u at)
    是一个函数(列
    posted\u at
    仅用于该函数),
    具有
    将不会有问题,即使它未在
    选择中指定。如果我遗漏了或陈述了不正确的内容,我会提前道歉,但这就是我的理解。特别是,因为
    MAX
    是一个聚合函数,是一种特殊类型的函数,它根据组成组的所有行的值,逐组为每个
    返回一个值。
    
    SELECT post.id, COUNT(DISTINCT postcomments.id) as comments
    FROM posts
    JOIN postcomments on postcomments.postid = post.id
    GROUP BY post.id
    HAVING MAX(postcomment.posted_at) >= DATE_SUB(NOW(), INTERVAL 15 DAY)
    ORDER BY comments DESC