4

示例关键字搜索“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”的记录。

如果我使用“洗车”,这两个词至少需要出现一次。关于如何修改我的搜索以考虑此条件的任何建议?

4

5 回答 5

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 功能。

于 2012-08-08T08:13:12.203 回答
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]."%') ";
    }    
于 2012-08-08T08:10:10.947 回答
0

试试这个:

   AND (CONCAT(' ',dealTitle,' ') LIKE '% car %' and 
   CONCAT(' ',dealTitle,' ') LIKE '% wash %' )
于 2012-08-08T08:09:17.130 回答
0

试试这个查询: -

AND (dealTitle LIKE '%car wash%' )
于 2012-08-08T08:15:55.477 回答
0

您基本上是在尝试实现搜索引擎的功能——全文索引。 LIKE '%keyword%'如您所知,是部分匹配。它不仅命中部分单词,而且非常慢,因为数据库必须读取和比较磁盘上的每条记录。

考虑使用全文索引器。MySQL 专门支持它。见全文

于 2012-08-08T08:18:20.673 回答