具有多个动态条件的SQL查询选择

时间:2019-04-22 18:34:59

标签: php sql

我想使用动态填充的条件来执行SELECT查询。

if($_POST['a']=='true'){
    $a = 'a,';
    $a_where = 'a >0';
}
if($_POST['b']=='true'){
    $b = 'b,';
    $b_where = 'b >0';
}
if($_POST['c']=='true'){
    $c = 'c,';
    $c_where = 'c >0';
}

比我想在哪里做

$where = 'WHERE '.$a_where.' OR '.$b_where.' OR '.$c_where;

然后查询

$query = mysql_query('SELECT id,'.$a.$b.$c.'date FROM t_name '.$where.' ORDER BY date DESC');

问题是如果ba不是POST而不是我在查询中出错。实际上,这里只有WHERE子句是问题。

1 个答案:

答案 0 :(得分:0)

与其将as作为单独的变量构建起来,不如将它们作为数组收集起来更容易,对列名和where子句的部分都执行此操作,然后使用implode()来构建完整的SQL ... < / p>

$columns = [ 'id', 'date' ];
$where = [];
if($_POST['a']=='true'){
    $columns[] = 'a';
    $where[] = 'a >0';
}
if($_POST['b']=='true'){
    $columns[] = 'b';
    $where[] = 'b >0';
}
if($_POST['c']=='true'){
    $columns[] = 'c';
    $where[] = 'c >0';
}

$sql = 'SELECT '.implode(",", $columns).'
          FROM t_name 
          WHERE '.implode(" or ", $where).' 
          ORDER BY date DESC';