我想用多个过滤器获取内容,现在只有一个过滤器。 例如:
SELECT * FROM Table1 WHERE status = true AND category ='Camera'AND model ='三星'AND type ='新'
我想为它创建一个数组。但是因为我是一个没有领先的新手。
function getAllRequests($filter){
if(empty($filter)){
$addfilter = '';
}else{
$addfilter = 'AND cat_id=' . $filter;
}
}
$sql = 'SELECT * FROM Table1 WHERE status=true' . $filter;
任何帮助将不胜感激。
答案 0 :(得分: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;
您不需要传递$_REQUEST
(这将适用于GET和POST),因为它已经是超级全局。
答案 1 :(得分:1)
function getAllRequests($filter){
if(empty($filter)){
$addfilter = '';
}else{
$addfilter = 'AND cat_id=' . $filter;
}
}
$ sql ='SELECT * FROM Table1 WHERE status = true'。 $ addfilter;
答案 2 :(得分:0)
您可以使用另一种方法,即使用可选参数,它会使您的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
值的查询的所有值都将被忽略,因为它不会显示,因为{ {1}}始终为真,它就像WHERE 1 = 1
。
答案 3 :(得分:0)
使用此
function getAllRequests($filter){
if(empty($filter)){
$addfilter = '';
}else{
$addfilter .= 'AND cat_id=' . $filter;
}
return $addfilter;
}
$sql = 'SELECT * FROM Table1 WHERE status=true' . getAllRequests($filter);
答案 4 :(得分:0)
当你发送数组时,确保它有索引
$conditions = array('category' => 'Camera', 'model' => 'Samsung' , 'type' => 'New')
现在循环播放它。在你的其他条件
foreach($conditions as $key =>$value){
$addfilter .= 'AND ' . $key . ' = ' . $value;
}