如何在SQL查询中使用LIKE运算符,返回与该值不完全匹配但在其中包含几个单词的数据

时间:2017-07-16 01:25:03

标签: mysql sql

我有一本名为“Web Developer”,“Web Designer”的书,我想要一个查询,当我搜索其中包含“web”字样的任何内容时,它将返回两本书,例如“Web Consultant”。但问题是,当我这样查询时,它没有返回任何数据

SELECT * FROM `books` WHERE `title` LIKE '%Web Consultant%';

但我知道将类似值更改为'%web%'将返回包含“web”世界的所有数据。但我的问题是,如果用户在“网络”字后添加一些单词,那该怎么办。

所以问题是这样做的确切方法或查询是什么,谢谢!

示例:此处的场景是如果用户正在搜索他不记得完整标题但只记住其中的单词的内容。所以他会尝试像“web blahblablah”那样搜索,所以我的目标就是回归所有在他们的标题上都有“网络”字样的书籍

3 个答案:

答案 0 :(得分:1)

正常的表达方式,虽然细节因实施而异。我最近一直在使用Oracle,但在查看MySql时,如果你不需要多字节字符,我想出来:

SELECT * FROM `books` WHERE title REGEXP 'Web Developer|Web Designer'

https://dev.mysql.com/doc/refman/5.5/en/regexp.html

答案 1 :(得分:1)

  
    

如果用户在“网络”字词后添加[s]某些字词

,该怎么办?   

如果您想要一个标题包含“web”后面有一些未知单词的书籍列表,那么您可以执行以下操作:

RDCOMClient_0.93-0.zip

当然,这取决于您如何定义SELECT * FROM `books` WHERE `title` REGEXP 'web[[:blank]]+[[:alpha:]]+' 关于上述RE中word之后的内容。但我认为你的问题的重点在于你要排除标题以“web”结尾的书籍,因为你知道在它之后必须有一些词。您可以查看here,了解有关如何定义+的详细信息。

你应该记住,你要求找到“web”后跟一些未知单词。如果你说你想找到 word web后跟一些未知单词,那么RE会更复杂。您必须允许“w”位于标题的开头或前面有空白字符。

答案 2 :(得分:0)

我建议在查询之前处理输入:

  1. 通过空白分解数组的输入。 PHP例如:

    $wordArray = explode(' ', 'Web Consultant');

  2. 将每个单词组合成OR条件到查询:

    SELECT * FROM books WHERE title LIKE '%Web%' OR title LIKE '%Consultant%';

  3. 这是搜索引擎所做的简单模式。

    在您的情况下,您还可以将第一个单词定义为'Web%',这样可以更准确地找到标题模式。