我有三张桌子,
帖子 标签, Posts_Tags_Link
帖子有: id,content
标签有:id,tag
Posts_Tags_Link有:post_id,tag_id
基本上如果标签链接到帖子,那么在Posts_Tags_Link中创建一个条目,因为这是一个很多关系。
无论如何,我想做一些搜索并返回链接到特定关键字的帖子中的所有行。
E.g。如果我有
文章:
id | content
1 | some stuff
2 | more stuff
3 | stuff again
标签:
id | tag
1 | first
2 | second
3 | third
4 | fourth
Posts_Tags_Link
post_id | tag_id
1 | 1
1 | 2
2 | 2
3 | 3
3 | 4
我搜索second
我要返回
id | content
1 | some stuff
2 | more stuff
我假设我要使用联接, 我是否只是将我的帖子表连接到链接表,在post_id上,并将链接表连接到tag_id列上的tags表的链接表?
我认为这是正确的,但是如果我只想要与搜索匹配的行(比如不在哪里)我会使用或者是否会使用其中一个不同的联接?
我希望如果我搜索sec
它会产生与我搜索second
相同的结果,所以相信我必须使用这样做吗?
答案 0 :(得分:3)
您应该加入这三个表,因为您想从中搜索,例如
SELECT a.*
FROM post a
INNER JOIN Posts_Tags_Link b
on a.id = b.post_id
INNER JOIN Tag c
ON b.tag_tag_id = id
WHERE a.content like '%keyword%' OR -- build you conditions here
c.tag like '%keyword%'
答案 1 :(得分:0)
尝试使用以下查询。
SELECT p.id, p.content FROM
Posts_Tags_Link ptl
INNER JOIN Posts p ON p.id = ptl.post_id
INNER JOIN Tags t ON t.id = ptl.tag_id
WHERE t.tag = 'second'