我有以下表格:
岗位---------------------id |名称---------------------1|第一篇文章2|另一篇帖子标记---------------------id |名称---------------------1|标签12|标签23|Tag3post_tags---------------------post_id |标签_id---------------------1|21|32|13|2
我正试图写一个查询,(用人类可读的术语)会说"查找所有用标签1或标签2标记的帖子"。
因此,我可以放入多个标签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)
但这没有结果。我真的不知道从这里到哪里去。有什么方法可以在一个查询中做到这一点吗?也就是说,不需要先获取帖子,然后循环它们来获取标签?
使用IN
运算符:
SELECT post_id
FROM posts_tags
WHERE tag_id IN (1,2,3)
为了避免post_id
重复,请使用DISTINCT
:
SELECT DISTINCT post_id
...
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)
通过加入Posts表,您现在可以访问所有的post数据,我想这就是您想要的。
您还必须加入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在这里回答。
http://www.sqlfiddle.com/#!2/d785e/5
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'