我有一个关键字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”以查找和匹配结果。
答案 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()
是单向的。