我有 3 个表、帖子、标签和 post_tags。帖子和标签具有多对多的关系。
posts table
+----+------------------------------------------------------+
| id | title |
+----+------------------------------------------------------+
| 1 | title1 |
| 2 | title2 |
| 3 | title3 |
+----+------------------------------------------------------+
post_tags table
+----+---------+--------+
| id | post_id | tag_id |
+----+---------+--------+
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 1 | 4 |
| 4 | 2 | 2 |
| 5 | 2 | 4 |
| 6 | 2 | 5 |
| 7 | 2 | 6 |
| 8 | 3 | 3 |
| 9 | 3 | 4 |
| 10 | 3 | 5 |
+----+---------+--------+
所以,我需要根据 tag_id 找到帖子,以防我只有一个标签,解决方案似乎很容易。
SELECT posts.id, posts.title
FROM posts
INNER JOIN post_tags
ON posts.id = post_tags.post_id
AND post_tags.tag_id = 2
所以,我只得到那些在 post_tags 表中有 tag_id 2 的帖子。所以,现在我只想获取那些同时具有 tag_id 2 和 3 的帖子。我的意思是,如果某些帖子的 tag_id 为 2 而不是 3,则不应获取这些帖子。我怎样才能做到这一点?
我试过这个
SELECT posts.id, posts.title
FROM posts
INNER JOIN post_tags
ON posts.id = post_tags.post_id
AND post_tags.tag_id = 2
AND post_tags.tag_id = 3
但它返回空,我想我可以理解为什么,因为似乎为同一个 tag_id 字段创建了两个和条件。
更新:
此查询返回所有 tag_id 为 2 OR 3 但需要 2 AND 3 的帖子
SELECT posts.id, posts.title
FROM posts
INNER JOIN post_tags
ON posts.id = post_tags.post_id AND post_tags.tag_id IN (2,3);
谢谢