使用第二个表作为查找?

时间:2012-09-10 04:25:31

标签: mysql sql join sql-like

我有三张桌子,

帖子 标签, 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相同的结果,所以相信我必须使用这样做吗?

2 个答案:

答案 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'