我有以下表格:
posts --------------------- id | name --------------------- 1 | First Post 2 | Another post tags --------------------- id | name --------------------- 1 | Tag1 2 | Tag2 3 | Tag3 posts_tags --------------------- post_id | tag_id --------------------- 1 | 2 1 | 3 2 | 1 3 | 2
我正在尝试编写一个查询(用人类可读的术语)会说“查找所有标记为tag1或tag2的帖子”。
因此,我可以添加多个标记ID,并获取至少包含其中一个标记的帖子列表。
我试过这个:
SElECT t1.name
FROM posts AS t1 INNER JOIN posts_tags AS t2
ON t1.id = t2.post_id
WHERE t2.tag_id IN(1,2)
但这没有结果。我不确定从哪里开始。有什么方法可以在一个查询中做到这一点 - 即没有先获取帖子,然后循环遍历它们以获取标签?
答案 0 :(得分:2)
使用IN
运算符:
SELECT post_id
FROM posts_tags
WHERE tag_id IN (1,2,3)
为避免获得post_id
重复项,请使用DISTINCT
:
SELECT DISTINCT post_id
...
答案 1 :(得分:0)
SELECT
t1.post_id
FROM
posts_tags as t1
INNER JOIN
posts AS t2
ON
t1.post_id = t2.id
WHERE
t2.tag_id IN(1,2)
通过加入帖子表,您现在可以访问所有帖子数据,我认为这是您正在寻找的。 p>
答案 2 :(得分:0)
您还必须加入posts_tags
表。
SElECT t1.name FROM posts as t1 INNER JOIN posts_tags as t3 on t3.post_id = t1.id INNER JOIN tags AS t2 ON t2.id = t3.tag_id WHERE t2.id IN(1,2)
SQLFiddle在这里回答。
答案 3 :(得分:-1)
SELECT posts.name FROM posts LEFT JOIN post_tags ON posts.id = post_tags.post_id WHERE post_tags.tag_id = '1' OR post_tags.tag_id = '2'