正如标题所说,我想通过必需或拒绝的标签来实现搜索。
简而言之:
您按照"足球"
这样的术语进行搜索查询
SELECT
p.*
FROM
posts p
WHERE
p.title LIKE '%football%'
足够公平。
现在你想要所有带有标签的帖子" win"," new"和#34;本地" tag_id
由搜索表单
SELECT DISTINCT
p.*
FROM
posts p
INNER JOIN posts_tags pt
ON pt.post_id = p.id
WHERE
(
pt.tag_id IN (1,2,3)
)
AND p.title LIKE "%SearchTerm%"
或者你不想找到与#34;网球相关的任何东西"
SELECT DISTINCT
p.*
FROM
posts p
INNER JOIN posts_tags pt
ON pt.post_id = p.id
WHERE
(
pt.tag_id IN (pt.tag_id) <- Workarround for "in everything"
AND pt.tag_id NOT IN (4)
)
AND p.title LIKE '%SearchTerm%'
每个查询似乎都会忽略IN/NOT IN
个部分,而且仅用于title LIKE
个部分,因为我总是得到相同的结果集。
我用括号播放了arround并尝试首先聚合标记。有用。
答案 0 :(得分:0)
我想这会起作用:
SELECT DISTINCT
p.*
FROM
posts p
INNER JOIN posts_tags pt
ON pt.post_id = p.id
WHERE p.title LIKE '%SearchTerm%'
AND pt.tag_id <> 4
因为这基本上表明你想要搜索词的任何内容,除了pt.tag_id不等于4(你可能需要做&#39; 4&#39;如果它是一个字符串)。