MySql REGEXP通过包含特定单词来搜索多个单词

时间:2018-05-03 04:12:48

标签: php mysql regex search

我有一个关键字coloumn的数据库

需要在用户完成的查询的基础上搜索数据库。

每个关键字最后都有“outlet”字样,但用户只会搜索“gul ahmad”而不是“gul ahmad outlet”。为此,我使用以下查询,事情工作得很好,以获得结果,并找到完整的结果“Gul Ahmad Outlet”

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

现在我有2个问题 1.如果单词“outlet位于查询单词之间,那么它就找不到单词。例如,如果用户搜索”kohistan lahore“,数据库有一个名为”kohistan outlet lahore“的插座,但它在数据库中找不到关键字返回空。如何告诉数据库在其间,开头或结尾处包含“outlet”以查找和匹配结果。

  1. 如果某个用户搜索“nabeel's outlet”数据库,但是由于“'”这个查询返回空而没有任何结果。

2 个答案:

答案 0 :(得分:1)

您可以做的是您可以将列值与第一个单词匹配 你的搜索表达式(即nabeel的出口)。我相信这样你就能够涵盖所有场景。

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

看看这个小提琴并自己测试一下:http://sqlfiddle.com/#!9/b3000/21

希望它有所帮助。

答案 1 :(得分:0)

更简单:[[:<:]]$keyword[[:>:]] - 这会检查&#34;字边界&#34;而不是空格或标点符号或字符串的开始/结束。 $keyword = "nabeel's"应该不是问题。

你不想总是盯着&#34; outlet&#34;?

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

而且,是的,您必须转义某些内容,例如用于引用正则表达式字符串的引号。 PHP addslashes()是单向的。