Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询使用Php在长字符串中搜索多个关键字_Php_Mysql_Sql - Fatal编程技术网

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

MySQL查询使用Php在长字符串中搜索多个关键字,php,mysql,sql,Php,Mysql,Sql,示例关键字搜索洗车 洗车必须显示在字符串中,无论位置如何 可搜索的字符串可能很长,查询应同时或分别搜索这些关键字。可以有两个以上的关键字 $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 dealTi

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

可搜索的字符串可能很长,查询应同时或分别搜索这些关键字。可以有两个以上的关键字

$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的记录

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

尝试以下方法:

   AND (CONCAT(' ',dealTitle,' ') LIKE '% car %' and 
   CONCAT(' ',dealTitle,' ') LIKE '% wash %' )
应该使用和

编辑:

for($i = 0; $i < count($key); $i++){
            $query.=" AND (dealTitle like '% ".$key[$i]." %' or dealTitle like '% ".$key[$i]."' or dealTitle like '".$key[$i]."%') ";
    }    

如果您使用的是mysql数据库,那么有一个全文搜索功能,这将是一个健壮且可扩展的解决方案

$query .= " AND MATCH(dealTitle) AGAINST('". $searchString ."')";
阅读本文了解MySQL中的全文搜索功能。

尝试以下查询:-

AND (dealTitle LIKE '%car wash%' )

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


考虑使用全文索引器。MySQL特别支持它。请参见

它也会将卡还给我。。这是不可接受的关键字这里还有一个问题相同[link]那么开始的第二个关键字呢??与洗车一样,它也会接受关键字卡以及carit。如果洗车不在字符串中,它会返回关键字CAR??您想要的是洗车必须出现在字符串中,无论位置如何,我是否理解正确?要满足确切的字符串,请使用[[::]]。修改了我的答案,请尝试。在这种情况下,将只返回自使用and之后字符串中出现的car和wash THOW的结果。您可以尝试我编辑的答案。顺便说一句,我认为这与您现有的查询相同?以下是错误1214-使用的表类型不支持全文索引。是否可以在此列上引入全文索引?
AND (dealTitle LIKE '%car wash%' )