MySQL选择字段包含一个字符串但不包含另一个字符串

时间:2012-12-04 02:43:34

标签: mysql search

我必须为产品数据库构建一个搜索查询,该数据库包含两个名称相似的产品,其名称如下所示:

“Widget模拟器和虚拟研讨会......”

“Widget Simulator for ...”

目前,如果有人搜索“Widget Simulator”,他们会在列表中获得这两种类型的产品。 我正在尝试构建一个类似于“Widget Simulator not:Virtual Seminar”的查询,它将省略包含“Virtual Seminar”字样的产品

现有查询如下所示:

SELECT COUNT(*) AS `numrows` 
FROM (`content_product`) 
JOIN `content` ON `content`.`content_id` = `content_product`.`content_id` 
WHERE `content`.`version_status_id` = 28 
AND `content`.`status` = 11
AND `name`  LIKE '%widget%simulator%'

我尝试了以下内容,但它不起作用:

SELECT COUNT(*) AS `numrows` 
FROM (`content_product`) 
JOIN `content` ON `content`.`content_id` = `content_product`.`content_id` 
WHERE `content`.`version_status_id` = 28 
AND `content`.`status` = 11
AND `name`  LIKE '%widget%simulator%'
AND `name` NOT LIKE '%virtual%seminar%'

这不起作用。我想我明白为什么它不起作用,但我在这里或其他地方找不到任何告诉我如何做的事。

总而言之,我想显示名称中包含“Widget Simulator”的所有产品,同时省略那些也包含“Virtual Seminar”的产品。

感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

我认为你应该使用子查询的个人意见首先删除所有产品包含虚拟研讨会,然后选择包含Widget模拟器的其余部分,如下所示:

SELECT COUNT(*) AS `numrows` 
  FROM (`content_product`) 
  JOIN `content` ON `content`.`content_id` = `content_product`.`content_id` 
 WHERE `content`.`version_status_id` = 28 
   AND `content`.`status` = 11
   AND `name`  LIKE '%widget%simulator%'
   AND `content_product.id` NOT IN (
           SELECT `content_product.id` 
             FROM `content_product` 
            WHERE `name` LIKE '%virtual%seminar%'
       )