mysql中php数组的查询
我想用多个过滤器获取内容,现在只有一个。 例如: 从表1中选择*,其中status=true,category=Camera,并 型号='Samsung'和型号='New' 我想为它创建一个数组。但由于我是这方面的新手,没有领先优势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;
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;
}
}