Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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
使用LIKE进行php、sql多关键字匹配_Php_Sql - Fatal编程技术网

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

使用LIKE进行php、sql多关键字匹配,php,sql,Php,Sql,我试图使用LIKE从sql中获取行,其中键与列中的键数组匹配 $key = '%PDF%'; $q = mysql_query("SELECT * FROM `ads` WHERE key LIKE '$key' ORDER BY RAND() LIMIT 2"); 这可以很好地工作并显示结果,但当我将密钥更改为PDF文件时。i、 e: $key='%PDF文件%' 它不显示结果,因为在数据库中有一个键数组,请查看我的数据库列: 以下是我的sql键列: PDF,PDF,PDF搜索,PDF搜索,

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

$key = '%PDF%';
$q = mysql_query("SELECT * FROM `ads` WHERE key LIKE '$key' ORDER BY RAND() LIMIT 2");
这可以很好地工作并显示结果,但当我将密钥更改为PDF文件时。i、 e:

$key='%PDF文件%'

它不显示结果,因为在数据库中有一个键数组,请查看我的数据库列:

以下是我的sql键列:

PDF,PDF,PDF搜索,PDF搜索,PDF 引擎,pdf

那么解决办法是什么呢?如果关键是pdf文件,如何获得结果

我认为可以通过拆分键然后匹配关键字来实现。对吧?


这可以通过
explode()实现但是如何?如何与sql匹配?

当键为
'%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");

您可以对数组和explode使用各种技术来构造具有可变数量关键字的动态查询。

当关键字为
'%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");

您可以对数组和explode使用各种技术来构造具有可变数量关键字的动态查询。

您不能在一条语句中为Like输入多个关键字

你可以试试这个,它会帮你的

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

以此类推……

您不能在一条语句中为Like输入多个关键字

你可以试试这个,它会帮你的

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

以此类推……

这是因为LIKE只适用于一个字符串。如果要使用通配符,则必须使用更相似的语句


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

这是因为LIKE只适用于一个字符串。如果要使用通配符,则必须使用更相似的语句

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

试试这个

$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
试试这个

$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

你的意思是
WHERE键像“%pdf%”或像“%search%”或像这样的键…
我想你没有领会我的意思:我的意思是你不能像你的答案中那样做
WHERE键像“val1”或“val2”
,而
或类似的
给出了一个语法错误。您必须完整地编写条件:
WHERE键类似“val1”或键类似“val2”
。它仍然是错误的
或LIKE
是绝对不允许的,你必须每次都写
或key-LIKE
。好的,我已经在Mysql中检查过了…现在上面的查询运行良好…你只需要像上面一样输入关键字我不想听起来像一个坏记录,但你真的需要每次重复
键LIKE
。新查询运行时不会出错,但不会返回所有行。ORs之间的每个条件都是独立的,因此您的查询在功能上等于:
其中“%PDF SEARCH%”或“%PDF%”或类似于“%PDF%”的键。
。你可能会从中看出这是行不通的。你每次都需要完整的条件。你的意思是
WHERE键像“%pdf%”或者像“%search%”或者像…
我想你没有领会我的意思:我的意思是你不能做
WHERE键像“val1”或者“val2”
像你的答案中那样,并且
或者像
给出了一个语法错误。您必须完整地编写条件:
WHERE键类似“val1”或键类似“val2”
。它仍然是错误的
或LIKE
是绝对不允许的,你必须每次都写
或key-LIKE
。好的,我已经在Mysql中检查过了…现在上面的查询运行良好…你只需要像上面一样输入关键字我不想听起来像一个坏记录,但你真的需要每次重复
键LIKE
。新查询运行时不会出错,但不会返回所有行。ORs之间的每个条件都是独立的,因此您的查询在功能上等于:
其中“%PDF SEARCH%”或“%PDF%”或类似于“%PDF%”的键。
。你可能会从中看出这是行不通的。你每次都需要完整的条件。