mysql中php数组的查询

mysql中php数组的查询,php,mysql,arrays,Php,Mysql,Arrays,我想用多个过滤器获取内容,现在只有一个。 例如: 从表1中选择*,其中status=true,category=Camera,并 型号='Samsung'和型号='New' 我想为它创建一个数组。但由于我是这方面的新手,没有领先优势 function getAllRequests($filter){ if(empty($filter)){ $addfilter = ''; }else{ $addfilter = 'AND cat_id=' . $filter;

我想用多个过滤器获取内容,现在只有一个。 例如:

从表1中选择*,其中status=true,category=Camera,并 型号='Samsung'和型号='New'

我想为它创建一个数组。但由于我是这方面的新手,没有领先优势

function getAllRequests($filter){
if(empty($filter)){
    $addfilter = '';    
    }else{
    $addfilter = 'AND cat_id=' . $filter;
    }
}

$sql = 'SELECT * FROM Table1 WHERE status=true' . $filter;

任何帮助都将不胜感激。

您可以使用另一种方法,即使用可选参数,这将使您的
WHERE
子句根据需要动态。在这种方法中,您可以将所有参数的值直接传递给sql查询,该查询如下所示:

SELECT * 
FROM Table1 
WHERE 1 = 1
  AND (@status   IS NULL OR status   = @statusParam)
  AND (@category IS NULL OR category = @categoryParam)
  AND (@model    IS NULL OR model    = @modelParam)
  AND (@type     IS NULL OR type     = @typeParam)

然后,如果将任何参数
@statusParam
@categoryParam
@modelParam
@typeParam
NULL
值传递给查询,则将忽略与保存该值的列的比较。我使用了谓词
1=1
,如果传递给查询的所有值都是
NULL
值,那么所有
WHERE
子句都将被忽略,因为它不会出现,因为
WHERE 1=1
总是真的,就像
SELECT*FROM table 1
这将使您更接近解决方案,虽然它不会替换查询中的
cat_id
,但这肯定是错误的-尽管没有数组结构不可能做太多:

function getAllRequests($filter)
{
    $addfilter="";
    if(!empty($filter))
    {
        foreach($filter as $val)
        {
            $addfilter. = ' AND cat_id=' . $val .'\'';
        }
    }
    return $addFilter;
}

$myFilters=getAllRequests($filter);
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters;
另一方面,如果阵列的结构如下所示:

array{ category => camera, model => samsung); // etc
您可以使用以下选项:

function getAllRequests($filter)
{
    $addfilter="";
    if(!empty($filter))
    {
        foreach($filter as $key => $val)
        {
            $addfilter. = " AND `$key` = '$val'";
        }
    }
    return $addFilter;
}

$myFilters=getAllRequests($filter);
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters;
编辑:您可以通过以下方式循环所有过滤器:

function getAllRequests()
{
    $addfilter="";
    if(!empty($_REQUEST))
    {
    foreach($_REQUEST as $key => $val)
    {
        $addfilter. = " AND `$key` = '$val'";
    }
    }
    return $addFilter;
}

$myFilters=getAllRequests();
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters;
您不需要传递
$\u请求(这将适用于GET和POST),因为它已经是一个超全局的

function getAllRequests($filter){
    if(empty($filter)){
      $addfilter = '';    
     }else{
      $addfilter .= 'AND cat_id=' . $filter;
    }
  return $addfilter;
}

$sql = 'SELECT * FROM Table1 WHERE status=true' . getAllRequests($filter);

发送数组时,请确保它有索引

 $conditions = array('category' => 'Camera', 'model' => 'Samsung' , 'type' => 'New')
现在循环一下。在你的情况下

foreach($conditions as $key =>$value){

    $addfilter .= 'AND ' . $key . ' = ' . $value;

}

$sql='从状态为true的表1中选择*'$addfilter

@Fluffeh-就像你的想法一样,你能帮我从我的url创建一个数组吗?因为我所有的过滤器都在url示例中:get.php?type=car&year=2012&color=black。。。谢谢
function getAllRequests($filter){
if(empty($filter)){
$addfilter = '';    
}else{
$addfilter = 'AND cat_id=' . $filter;
 }
}