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
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