MySql - 根据匹配的ID

时间:2018-02-27 02:54:59

标签: php mysql

我的查询的下一步有问题,我的脑子里总是画一个空白......我有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

关于如何完成最后一步的任何想法?

我真的希望这是有道理的,如果你需要我清除任何事情,请告诉我。

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)