我正在尝试使用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匹配?
答案 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%'
依旧.....