我有一个关键字为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”数据库时发现了它,但由于“'”的原因,此查询返回空,没有任何结果。
2条答案
按热度按时间0yg35tkg1#
更简单:
[[:<:]]$keyword[[:>:]]
--这将检查“单词边界”,而不是空格、标点或字符串的开头/结尾。以及$keyword = "nabeel's"
应该不是问题。你难道不想总是在“出口”上加上标签吗?
而且,是的,您必须转义某些内容,例如将用于引用regex字符串的引号。php的
addslashes()
是一种方式。ee7vknir2#
您可以做的是,您可以将列值与搜索表达式的第一个单词(即nabeel的outlet)匹配。我相信这样你就可以涵盖所有的情况。
看看这把小提琴,测试一下你自己:http://sqlfiddle.com/#!2011年9月3日
希望有帮助。