我的查询的下一步有问题,我的脑子里总是画一个空白......我有3个MySql表。
第一个表名为post并且有一个id列(还有其他列,但它们不相关)
Id Title
---- --------
1 A
2 B
第二个表名为followingPost(发布用户喜欢),它有一个id列,userid列和postid列
Id userid postid
---- -------- -------------------
1 1 2
3 2 1
第三个表名为postTags(帖子的标签),它有一个id列,postid列和tagid列。
Id postid tagid
---- -------- --------
1 2 1
2 1 1
获取用户喜欢的帖子,我已经完成了以下
SELECT *
FROM followingPost
INNER JOIN posts ON posts.id = followingPost.postid
WHERE userid = 14
然后让用户喜欢带有标签ID的帖子,我已经用以下
完成了SELECT *
FROM followingPost
INNER JOIN posts ON posts.id = followingPost.postid
INNER JOIN postTags ON posts.id = postTags.postid
WHERE userid = 14
不,我想要做的是获取用户喜欢的帖子的标签,并获取所有也具有相同标签ID的帖子。
这就是我所期待的:
Id Title
---- --------
2 B
我期待这一点,因为用户1喜欢帖子2而帖子2的标签为1,帖子1也是如此,所以我期待返回帖子1
关于如何完成最后一步的任何想法?
我真的希望这是有道理的,如果你需要我清除任何事情,请告诉我。
答案 0 :(得分:1)
select * from posts
left join postTags on posts.id = postTags.postid
where postTags.tagid in
(SELECT postTags.tagid
FROM followingPost
INNER JOIN posts ON posts.id = followingPost.postid
INNER JOIN postTags ON posts.id = postTags.postid
WHERE userid = 14)
and posts.id not in
(SELECT posts.id
FROM followingPost
INNER JOIN posts ON posts.id = followingPost.postid
INNER JOIN postTags ON posts.id = postTags.postid
WHERE userid = 14)