我有3张桌子:
- 页面(id,name,desc)
- page_tags(id,page_id,tag_id)
- tag_posts(tag_id,post_id)
醇>
如果页面表中有一个页面,我想获取tag_posts表中的帖子,其中tag_id匹配 ALL page_tags表中给定页面的tag_ids。
例如,如果3个表中的条目是:
1)页面:
- [1,'第1页','有些desc']
醇>
2)page_tags:
- [1,1,1],
- [2,1,2]
醇>
3)tag_posts:
- [1,101],
- [2,102],
- [1,201],
- [3,202]
醇>
我使用此查询对3个表进行了简单的内连接:
SELECT tp.*
FROM pages p
JOIN page_tags pt ON pt.page_id = p.id
JOIN tag_posts tp ON tp.tag_id = pt.tag_id
WHERE 1
但是,这会从上面的示例tag_posts表中返回第1,2和3行,而我只想要第1行和第2行,因为这两行匹配 ALL 来自页面之间第一次连接的tag_id行page_tags表。
请让我知道如何实现这一目标。注意:我使用的是mysql。
答案 0 :(得分:1)
我很困惑。 tag_post表确实有3个匹配(第1行和第2行),因为tag_id = tag匹配的tag_id = 1。所以我会说你所看到的正确。
如果您要查找指定页面的tag_posts,则查询将为此...
SELECT tp.*
FROM pages p
JOIN page_tags pt ON pt.page_id = p.id
JOIN tag_posts tp ON tp.tag_id = pt.tag_id
WHERE p.id = 1