2

我有三张桌子,

帖子、标签、帖子_标签_链接

帖子有:id,内容

标签有:id、标签

Posts_Tags_Link 有:post_id、tag_id

基本上,如果标签链接到帖子,则在 Posts_Tags_Link 中创建一个条目,因为这是多对多关系。

无论如何,我想做一些搜索并从链接到特定关键字的帖子中返回所有行。

例如,如果我有

帖子:

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 列上的标签表?

我相信这是对的,但是如果我只想匹配与搜索匹配的行(比如不是在哪里),我会使用 like 还是不同的连接之一起作用?

我希望如果我搜索sec它会得到与我搜索的结果相同的结果,second所以相信我必须使用 like 来执行此操作?

4

2 回答 2

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%'
于 2012-09-10T04:30:07.530 回答
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'
于 2012-09-10T04:58:32.267 回答