使用mysql,我会跟踪用户是否在其他表中看到了帖子
Table Posts:
id body
1 test1
Table user_views
post_id user_id
1 1
上面的行表示用户1已经看到了张贴在1上的
我的问题是如何获得用户没有看到的帖子数-用户视图中有how行的帖子数
流程:每次用户打开博客页面时,我都会运行
select count(uv.post_id) as views_count,posts.id,posts.body
from posts left join user_views uv on uv.post_id = posts.id
group by posts.id
这将返回所有帖子以及有多少用户已经看到这篇帖子的计数
然而,我想在侧边栏上显示用户还没有看到的帖子的数量,这样用户就可以知道有他还没有看到新的帖子。
我的第一次尝试是
select count(*) from posts
where posts.id not in select post_id from user_views
where post_id = posts.id and user_id = 1
然而它不是有效的mysql,我怀疑它是最好的方法!
一个带有ISNULL检查的LEFT JOIN(或者右联接)是可行的。
SELECT COUNT(*) FROM Post as posts
LEFT JOIN user_views
ON posts.id = user_views.post_id
WHERE user_id = 1 AND user_views.post_id IS NULL
我注意到你有一个不同的目的的左加入。我相信可以将其更改为INNER JOIN以提高性能。
还要注意,在mysql中,当您使用子查询时,需要用括号将其括起来,以避免语法错误。更正后的查询将获得与我给出的结果相同的结果。哪个会更好取决于你的索引。
select count(*) from Post as posts
where posts.id not in (select post_id from user_views
where post_id = posts.id and user_id = 1)