2012-09-10 55 views
2

我有三个表,使用第二个表作为查找?

帖子, 标签, Posts_Tags_Link

文章有: ID,内容

标签有:ID,标签

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列上的标记表的链接表中?

我相信这是正确的,但如果我只想匹配搜索的行(如不是在哪里),我会喜欢或将不同的连接之一工作?

我想,如果我搜索sec它会有相同的结果,如果我搜索second所以相信我必须这样做使用像?

回答

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%' 
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'