Tagsearch by Term包含和排除

时间:2017-08-22 14:58:03

标签: mysql sql

正如标题所说,我想通过必需或拒绝的标签来实现搜索。

简而言之:

您按照"足球"

这样的术语进行搜索

查询

  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并尝试首先聚合标记。有用。

1 个答案:

答案 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;如果它是一个字符串)。