MySQL 查询多个关键字,使用 PHP 在长字符串中搜索


MySQL Query multiple keywords searching in long string using Php

关键字搜索"洗车"
示例洗车必须出现在字符串中,无论位置如何

可搜索的字符串可能很长,查询应一起或单独搜索这些关键字。可以有两个以上的关键字。

$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 %' )