簡體   English   中英

MySQL選擇問題:如何使用任何可選下拉菜單執行SELECT?

[英]MySQL select question: how to do a SELECT with any optional dropdowns?

好的,我已盡力找到這樣的線程,但到目前為止還算運氣,需要一些幫助來編寫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個卧室但有多個浴室的所有屬性),並且將浴室下拉列表留空(或“任意”),那么我只需要上面的SELECT語句,但是在“位置”中沒有“與”的地方。

所以我的問題是,如何檢查浴池下拉列表是否存在非零數量,並基於POST數組更新SELECT語句? 我懷疑這比我想象的要容易得多,我凝視的時間太長了……在此先感謝您為我指明了正確的方向。

我會做類似的事情:

$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);
<?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) : '');
?>

您可以使用以下內容,並且將來可能會擴展它。 我假設您在$ 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.

這里的好處是,如果您還有其他幾個項目,那么它們也適用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM