mysql regexp通过包含特定单词来搜索多个单词

atmip9wb  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(345)

我有一个关键字为column的数据库
需要在用户查询的基础上搜索数据库。
每个关键字的结尾都有“outlet”一词,但用户只会搜索“gul ahmad”,而不会搜索“gul ahmad outlet”。为此,我使用了下面的查询,结果很好,找到了完整的结果“gul ahmad outlet”

$sql = "SELECT keywords FROM table WHERE keywords REGEXP '([[:blank:][:punct:]]|^)$keyword([[:blank:][:punct:]]|$)'";

现在我有两个问题1。如果单词“outlet”位于查询单词之间,则它找不到该单词。e、 g如果用户搜索“kohistan lahore”,数据库有一个名为“kohistan outlet lahore”的出口,但在数据库中找不到关键字,返回空。如何告诉数据库在中间、开头或结尾包含“outlet”来查找和匹配结果。
如果某个用户搜索“nabeel's outlet”数据库时发现了它,但由于“'”的原因,此查询返回空,没有任何结果。

0yg35tkg

0yg35tkg1#

更简单: [[:<:]]$keyword[[:>:]] --这将检查“单词边界”,而不是空格、标点或字符串的开头/结尾。以及 $keyword = "nabeel's" 应该不是问题。
你难道不想总是在“出口”上加上标签吗?

REGEXP "[[:<:]]$keyword[[:>:]] outlet"

而且,是的,您必须转义某些内容,例如将用于引用regex字符串的引号。php的 addslashes() 是一种方式。

ee7vknir

ee7vknir2#

您可以做的是,您可以将列值与搜索表达式的第一个单词(即nabeel的outlet)匹配。我相信这样你就可以涵盖所有的情况。

select 
      * 
from `outlets` 
    where REPLACE(`name`,'\'','') regexp SUBSTRING_INDEX('nabeels outlet', ' ', 1)

看看这把小提琴,测试一下你自己:http://sqlfiddle.com/#!2011年9月3日
希望有帮助。

相关问题