php,sql使用LIKE进行多个关键字匹配

时间:2011-07-04 10:01:19

标签: php sql

我正在尝试使用LIKE从sql中获取行,其中键与列中的键数组匹配。

$key = '%PDF%';
$q = mysql_query("SELECT * FROM `ads` WHERE key LIKE '$key' ORDER BY RAND() LIMIT 2");

这样可以正常工作并显示结果,但是当我将我的密钥更改为PDF文件时。即:

  

$ key ='%PDF FILES%';

它没有显示结果,因为db中有一个键数组,请查看我的db列:

这是我的sql Key列:

  

PDF,pdf,PDF搜索,pdf搜索,PDF   ENGINE,pdf

那么解决方案是什么?如果密钥是pdf文件,如何获得结果?

我认为可以通过拆分密钥然后匹配关键字。正确?

这可以通过explode();来完成,但是怎么做?以及如何与sql匹配?

4 个答案:

答案 0 :(得分:3)

当密钥为'%PDF FILES%'时,您实际上是在搜索字符串“PDF FILES”,而不是单词PDF和FILES的某些组合。

要实现您的目标,请尝试构建如下的查询:

$key = '%PDF%';
$key2 = '%FILES%';

$q = mysql_query("SELECT * FROM `ads` WHERE (key LIKE '$key' OR key LIKE '$key2') ORDER BY RAND() LIMIT 2");

您可以对阵列使用各种技术并进行爆炸,以构建具有可变数量关键字的动态查询。

答案 1 :(得分:2)

试试这个,

$keyvalues=split(" ",$search_text);//Breaking the string to array of words

// Append the query by the keywords
while(list($key,$val)=each($keyvalues)){
if($val<>" " and strlen($val) > 0)

{$sql .= " name like '%$val%' or ";}

}// end of while

可以通过

删除尾随OR
$sql=substr($sql,0,(strlen($sql)-3));

答案 2 :(得分:0)

这是因为LIKE只能使用一个字符串。如果要使用通配符,则必须使用带有OR的更多LIKE语句。

另一方面,您可以使用IN接受逗号分隔的引用字符串,但它不接受通配符。

答案 3 :(得分:-2)

您不能为Like in One单个声明输入多个关键字。

你可以尝试这一点,它会对你有所帮助。

WHERE key LIKE '%PDF%' OR '%pdf%' OR '%PDF SEARCH%'

依旧.....