MySQL选择问题:如何使用任何可选的下拉菜单进行SELECT?

时间:2010-11-04 21:26:21

标签: php mysql

好的,我已经尽力找到这样的线程,但到目前为止还没有运气,需要一些帮助来制作我的SQL查询。我正在开发一个房地产项目并且有一个包含多个下拉列表的表单,如下所示:

   <select name="bed" id="bed">
     <option value="0">Any</option>    
        <option value="1">1 Bedroom</option>    
     <option value="2">2 Bedroom</option>    
     <option value="3">3 Bedroom</option>    
     <option value="4">4 Bedroom</option>    
     <option value="5">5 Bedroom</option>    
     <option value="6">6 Bedroom</option>    
    </select>

    <select name="bed" id="bed">
     <option value="0">Any</option>    
        <option value="1">1 Bedroom</option>    
     <option value="2">2 Bedroom</option>    
     <option value="3">3 Bedroom</option>    
     <option value="4">4 Bedroom</option>    
     <option value="5">5 Bedroom</option>    
     <option value="6">6 Bedroom</option>    
    </select>

如果用户想要搜索属性并同时选择“床位”和“浴室”号码 - 例如4床/ 2浴 - 那么很容易:

SELECT * FROM exp_channel_data WHERE field_id_4 = '<?= $search['bed'] ?>' AND field_id_5 = '<?= $search['bath'] ?>

(我在其中捕获了数组中的POST数据。)这可以按预期工作。

但如果用户选择床位 - 如同,向我显示所有具有3间卧室的房产然而许多浴室 - 并且将浴缸下拉空(或者'any'),那么我只需要像上面那样的SELECT语句,但是'WHERE'中没有'AND'。

所以我的问题是,如何检查浴下拉列表是否存在非零金额并根据POST数组更新SELECT语句?我怀疑它比我想象的容易得多,我只是盯着太长时间......提前感谢我指向正确的方向。

3 个答案:

答案 0 :(得分:3)

我会做类似的事情:

$query = "SELECT * FROM exp_channel_data WHERE 1 = 1 ";
if($search['bed']) $query .= "AND field_id_4 = ".$search['bed'].' ';
if($search['bath']) $query .= "AND field_id_5 = ".$search['bath'].' ';
$results = mysql_query($query);

答案 1 :(得分:0)

<?php
$conditions = array();
if ($search['bed'] != 0)
    $conditions[] = '`field_id_4` = '.$search['bed'];

if ($search['bath'] != 0)
    $conditions[] = '`field_id_5` = '.$search['bath'];
$sql = "SELECT * FROM exp_channel_data".(!empty($conditions) ? " WHERE ".implode(' AND ', $conditions) : '');
?>

答案 2 :(得分:0)

以下是您可以使用并可能在未来扩展的内容。我假设你在$ search []数组中没有任何其他内容 - 如果你这样做,那么你需要一个只包含其中适用字段的新数组。

$query = "SELECT * FROM exp_channel_data"
$conditions = array();
$where = '';

foreach($search as $field => $value)
{
    if($value != 0)
    {
        $conditions[] = "$field = $value"
    }
}

$where = implode(' AND ', $conditions);
if($where != '')
{
    $where = " WHERE $where";
}

$query .= $where;
//now go run your query.

这里的好处是,如果你有更多的项目,这也适用于他们。