查询中的问题以查找最近 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 的评论的用户。加入 users
到 posts
,然后 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)
)
我一直致力于 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 的评论的用户。加入 users
到 posts
,然后 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)
)