关键字搜索"洗车"
示例洗车必须出现在字符串中,无论位置如何
可搜索的字符串可能很长,查询应一起或单独搜索这些关键字。可以有两个以上的关键字。
$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"的记录。
如果我使用"洗车",这两个词至少需要出现一次。关于如何修改我的搜索以考虑此条件的任何建议?
如果您
使用的是mysql数据库,则有一个全文搜索功能,它将是强大且可扩展的解决方案。
$query .= " AND MATCH(dealTitle) AGAINST('". $searchString ."')";
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html#function_match
查看本文以了解MySQL中的FULLTEXT SEARCH功能。
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]."%') ";
}
试试这个查询:-
AND (dealTitle LIKE '%car wash%' )
你基本上是在努力实现搜索引擎所做的——全文索引。 LIKE '%keyword%'
是部分匹配,如您所知。 它不仅命中部分单词,而且非常慢,因为数据库必须读取和比较磁盘上的每一条记录。
请考虑使用全文索引器。 MySQL特别支持它。 查看全文
试试这个:
AND (CONCAT(' ',dealTitle,' ') LIKE '% car %' and
CONCAT(' ',dealTitle,' ') LIKE '% wash %' )