Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySql REGEXP通过包含特定单词进行多单词搜索_Php_Mysql_Regex_Search - Fatal编程技术网

Php MySql REGEXP通过包含特定单词进行多单词搜索

Php MySql REGEXP通过包含特定单词进行多单词搜索,php,mysql,regex,search,Php,Mysql,Regex,Search,我有一个关键字为column的数据库 需要在用户完成查询的基础上搜索数据库 每个关键字的末尾都有outlet一词,但用户只会搜索gul ahmad,而不会搜索gul ahmad outlet。为此,我使用了下面的查询,结果很好,找到了完整的结果Gul Ahmad Outlet $sql = "SELECT keywords FROM table WHERE keywords REGEXP '([[:blank:][:punct:]]|^)$keyword([[:blank:][:punct:]]

我有一个关键字为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的outlet数据库中有它,但由于“此查询返回空,没有任何结果。”。
您可以做的是,只需第一个单词就可以匹配列值 你的搜索表达式,即nabeel的出口。我相信这样你就能涵盖你所有的场景

select 
      * 
from `outlets` 
    where REPLACE(`name`,'\'','') regexp SUBSTRING_INDEX('nabeels outlet', ' ', 1)
看看这把小提琴,测试一下你自己:

希望有帮助。

简单得多:[[:]]-这会检查单词边界,而不是空格、标点符号或字符串的开始/结束。$keyword=nabeel不应该是问题

难道你不想一直抓住出口吗

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

而且,是的,您必须转义某些内容,例如用于引用正则表达式字符串的引号。PHP的addslashes是一种方法。

它并不能解决问题,就好像用户搜索nabeels outlet时没有“被误解……编辑以避免列值中的撇号”。谢谢它为“但我如何解决问题?”?另一个问题是regexp子字符串_索引'nabeels outlet','',1只关注第一个单词,如果有超过1个或2个具有相同起始单词的条目,它不会跟随查询,并将其他结果转换为所需的结果。。。。。。。。。。我们可以告诉这个查询“[:blank:][:punch:][:punch:][]| ^$关键字[[:blank:][:punch:][:punch:][]|$”,看看是否可以通过在单词之间添加outlet来实现精确匹配吗