如果变量等于“all”,则选择列中的所有字段,否则仅选择等于变量的字段

时间:2015-07-19 12:32:15

标签: php mysql sql

我有这个查询,显示一些待售的建筑物,用户可以选择“plaats”(区域)和slaapkamers(卧室数量)。这些存储在变量中,此查询有效:

$p = $_POST['plaats'];
$s = $_POST['slaapkamers'];

$sSql = "select * from tblpand WHERE PandPostcodeGemeente='". mysql_real_escape_string( $p ) ."' AND PandSlaapkamers='". mysql_real_escape_string( $s ) ."';

只要变量等于一个字段,这就可以工作。例如,如果$ s等于3,则显示所有带有3间卧室的建筑物。但是,还有一个选项可以选择所有卧室(“全部”),与区域相同,如果应选择所有区域,则$ p为“全部”。我不知道如何将其添加到查询中。也许是这样的:

$sSql = "select * from tblpand WHERE"If ($p != "all"){ PandPostcodeGemeente='". mysql_real_escape_string( $p ) ."'}" AND "If ($s != "all"){PandSlaapkamers='". mysql_real_escape_string( $s ) ."'}";

这只是一个理论上的例子,我知道这不起作用。有关于此的任何想法?谢谢大家。

2 个答案:

答案 0 :(得分:2)

试试这个:

$p = $_POST['plaats'];
$s = $_POST['slaapkamers'];

$sSql = "select * from tblpand WHERE 1=1";
if ($p !== 'all') {
    $sSql .= " AND PandPostcodeGemeente='" . mysql_real_escape_string($p) . "'";
}
if ($s !== 'all') {
    $sSql .= "AND PandSlaapkamers='" . mysql_real_escape_string($s) . "'";
}

答案 1 :(得分:2)

请允许我推荐一种不同的方法,使用它:

$p = filter_input(INPUT_POST, 'plaats', FILTER_SANITIZE_STRING);
$s = filter_input(INPUT_POST, 'slaapkamers', FILTER_SANITIZE_STRING);

$query = 'select * from tblpand ';

if (strcasecmp($p, 'all') !== 0) {

    $query .= " WHERE PandPostcodeGemeente='". $p . "'";
    $wherehasBeenSet = true;
}

if (strcasecmp($s, 'all') !== 0) {

    if (isset($wherehasBeenSet)}) {
        $query .= ' AND ';
    } else {
        $query .= ' WHERE ';
    }
    $query .= " PandSlaapkamers='" . $s . "'";
}