MySQL使用Php查询使用长字符串搜索的多个关键字

时间:2012-08-08 08:05:08

标签: php mysql sql

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

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

5 个答案:

答案 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