查询中的问题以查找最近 xx 天未对任何帖子发表评论的用户

Issue in Query to find users who have not commented on any posts for last xx days

我一直致力于 mysql 查询,以查找在过去 10 天内未对任何帖子发表任何评论的用户。 我在下面写了这样的东西。但是找不到预期的结果。

我有三个表用户、帖子、评论。

SELECT * FROM users AS u
LEFT JOIN posts AS p ON u.userID = p.postID
LEFT JOIN comments AS c ON p.postID = c.postID 
group by p.p.postID 
having  (max(t.addedDate) < DATE_SUB(NOW(), INTERVAL 10 DAY));

此查询仍然返回过去 10 天内发表过评论的用户。不确定我在这里做错了什么。如果有人可以在这里帮助我?

现有逻辑似乎是您要求的最直译:

SELECT *
FROM users u
WHERE NOT EXISTS (SELECT 1 FROM posts p
                  INNER JOIN comments c ON p.postID = c.postID
                  WHERE p.userID = u.userID AND
                        c.addedDate >= DATE_SUB(NOW(), INTERVAL 10 DAY));

问题来了: 您想要查找在过去 10 天内未 post 编辑 任何针对任何 posts 的评论的用户。加入 usersposts,然后 comments 会给你 创建了一个 post 的用户,其中有一些评论 。任何进一步的过滤都将应用于该错误的子集。

假设您的 comments table 确实有一个 userId 字段,这里是关于如何解决它的猜测。否则,请将您的架构添加到问题中。

select * 
from users u
where u.id not in (
    select c.userID 
    from comments c 
    where c.addedDate >= DATE_SUB(NOW(), INTERVAL 10 DAY)
)