匹配所有选项中的所有参数,然后查询数据库

时间:2013-07-12 14:31:40

标签: php mysql

对不起,如果这个标题含糊不清,我甚至无法想到要调用的内容......我会更新给定的评论。

我有两组复选框,第一组(称为代码)有5个选项,第二组有20个选项(称为系列)。目前,为了为我的查询构造WHERE语句,我这样做:

if(isset($_POST['code']) && !empty($_POST['code'])){ 
foreach($_POST['code'] as $key=>$value){ 
    if($value==1) $criteria[] = "code='".mysql_escape_string($key)."'"; 
} 
 $criteria = implode(' OR ', $criteria);
}

if(isset($_POST['family']) && !empty($_POST['family'])){ 
foreach($_POST['family'] as $key=>$value){ 
    if($value==1) $family_criteria[] = "family='".mysql_escape_string($key)."'";

} 
$family_criteria = implode(' OR ', $family_criteria);

}

这是查询的一部分

WHERE $criteria AND $family_criteria ORDER BY ....

这导致“WHERE code = 1 OR code = 2 AND family = jones ORDER BY ...”

虽然我需要做的是“WHERE code = 1 and family = jones OR code = 2 and family = jones ORDER BY ...”

1 个答案:

答案 0 :(得分:1)

如何构建以下内容:

... WHERE (code=1 or code=2) and family='jones' ...

这只需要稍微调整即可在code参数生成周围添加parens,并且在语义上与您所说的相同。

if(isset($_POST['code']) && !empty($_POST['code'])){ 
    foreach($_POST['code'] as $key=>$value){ 
        if($value==1) $criteria[] = "code='".mysql_escape_string($key)."'"; 
    } 
    $criteria = "(" . implode(' OR ', $criteria) . ")";
}