我有一本名为"Web Developer","Web Designer"的书,我想要一个查询,当我搜索任何包含"Web"单词的内容时,例如"Web Consultant",它将返回这两本书。但问题是当我像这样查询时,它没有返回任何数据
SELECT * FROM `books` WHERE `title` LIKE '%Web Consultant%';
但我知道将类似值更改为"%web%"将返回其中包含"web"世界的所有数据。但我的问题是,如果用户在"网络"字之后添加一些单词怎么办。
所以问题是这样做的确切方法或查询是什么,谢谢!
示例:这里的场景是,如果用户正在搜索他不记得完整标题但只记得其中的一个单词的内容。所以他会尝试像"web blahblablah"一样搜索,所以这里的目标是我想返回所有标题上有"web"字的书。
如果用户在"web"单词后添加一些单词怎么办
如果你想要一个书名包含"web"后跟一些未知单词的书籍列表,那么你可以执行以下内容:
SELECT * FROM `books` WHERE `title` REGEXP 'web[[:blank]]+[[:alpha:]]+'
当然,这取决于您如何定义word
上述 RE 中+
后面的内容。但我认为你问题的重点是你想排除标题以"网络"结尾的书,因为你知道它后面一定有一些词。您可以在此处查看有关如何定义word
的更多详细信息。
您应该记住,您要求查找"网络",后跟一些未知单词。如果你说你想找到网络这个词,后面跟一些未知的词,那么RE会更复杂。您必须允许"w"位于标题的开头或前面有空格字符。
正则表达式来救援,尽管细节因实现而异。我最近一直在使用 Oracle,但是回顾 MySql,如果你不需要多字节字符,我想出了:
从"书籍"中选择 *,其中标题正则表达式"Web 开发人员|网页设计师 https://dev.mysql.com/doc/refman/5.5/en/regexp.html
我建议在查询之前处理输入:
将输入分解为数组的空白。例如 PHP:
$wordArray = explode(' ', 'Web Consultant');
将每个单词合并到查询的
OR
条件中:SELECT * FROM books WHERE title LIKE '%Web%' OR title LIKE '%Consultant%';
这是搜索引擎所做的简单模式。
在您的情况下,您还可以定义要'Web%'
的第一个单词,这样可以更准确地查找标题模式。