示例关键字搜索“CAR WASH”
无论位置如何,都必须在字符串中出现洗车
可搜索的字符串可能很长,查询应该一起和单独搜索这些关键字。可以有两个以上的关键字。
$query="SELECT * FROM TABLE WHERE zip LIKE'abc'";
$key= explode(" ", $keywords);
for($i = 0; $i < count($key); $i++){
$query.=" AND (dealTitle LIKE '".$key[$i]." %' OR dealTitle LIKE '% ".$key[$i]." %' OR dealTitle LIKE '% ".$key[$i]." ')";
}
但是,查询会返回包含“car”或“wash”的记录。
如果我使用“洗车”,这两个单词至少需要出现一次。有关如何修改我的搜索以考虑此条件的任何建议吗?
答案 0 :(得分:4)
如果您使用的是mysql数据库,则可以使用全文搜索功能,这将是强大且可扩展的解决方案。
$query .= " AND MATCH(dealTitle) AGAINST('". $searchString ."')";
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html#function_match
查看本文以了解MySQL中的FULLTEXT SEARCH函数。
答案 1 :(得分:1)
for($i = 0; $i < count($key); $i++){
$query.=" AND (dealTitle rlike '[[:<:]]".$key[$i]."[[:>:]]' )";
}
应该使用AND
编辑:
for($i = 0; $i < count($key); $i++){
$query.=" AND (dealTitle like '% ".$key[$i]." %' or dealTitle like '% ".$key[$i]."' or dealTitle like '".$key[$i]."%') ";
}
答案 2 :(得分:0)
试试这个:
AND (CONCAT(' ',dealTitle,' ') LIKE '% car %' and
CONCAT(' ',dealTitle,' ') LIKE '% wash %' )
答案 3 :(得分:0)
尝试此查询: -
AND (dealTitle LIKE '%car wash%' )
答案 4 :(得分:0)
您基本上是在尝试实现搜索引擎的功能 - 全文索引。 LIKE '%keyword%'
是您已经知道的部分匹配。它不仅会发出部分单词,而且非常慢,因为数据库必须读取并比较磁盘上的每个记录。
考虑使用全文索引器。 MySQL特别支持它。见FULLTEXT