2017-02-15 64 views
0

嗨,我有一個下拉菜單,它將值填入搜索表單。有兩個搜索標準。物業類別&財產子類別。當兩者都選中時,搜索效果很好。物業類別有五個選項:空白,住宅,商業,工業,農業..我想構造查詢,所以如果屬性類別中的值爲空白,它應顯示與住宅,商業,工業和農業相匹配的所有結果。目前將其留空不會給出答案。字段爲空時返回所有結果

我已經嘗試了兩種方式,使用數組,然後構建在MySQL陣列..但問題是如何在一個數組或MySQL中的變量搜索...

以下是HTML表單

<select class="searchpropertyinputs" name="property_category" id="property_category" onchange="subcategory('property_category', 'property_subcategory');"> 
    <option value="">Property Type</option> 
    <option value="Residential">Residential</option> 
    <option value="Commercial">Commercial</option> 
    <option value="Industrial">Industrial</option> 
    <option value="Agricultural">Agricultural</option> 
</select> 
</br> 

<select class="searchpropertyinputs" name="property_subcategory" id="property_subcategory"> 
    <option value="">Property Subtype</option> 
</select> 
</br> 

PHP

$property_category = ($_GET['property_category']); 

$select = $con->prepare("SELECT * FROM tbl_property WHERE (property_category='$property_category' AND property_subcategory='$property_subcategory') LIMIT {$start}, {$perPage}"); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 

我嘗試做以下,但問題是,如果選擇值它是一個變量,否則,如果它是空白的,然後它是一個數組..他NCE結構查詢是一個問題

if ($property_category == ""){ 
$myarray[1] = "'Residential'"; 
$myarray[2] = "'Commercial'"; 
$myarray[3] = "'Industrial'"; 
$myarray[4] = "'Agricultural'"; 
$property_category = implode(", ", $myarray); 
} 

$select = $con->prepare("SELECT * FROM tbl_property WHERE property_category IN ($property_category) LIMIT {$start}, {$perPage}"); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 
$count = $select->rowCount(); 

期望的結果是做基於用戶輸入的搜索,但如果用戶不選擇任何東西(空值),然後給所有存在於列中的結果。

這是行不通的,這是給沒有結果

$select = $con->prepare(
"SELECT * FROM tbl_property 
WHERE property_category LIKE 
    CASE WHEN '$property_category' = '' 
    THEN '%' 
    ELSE '$property_category' 
    END CASE 
    LIMIT {$start}, {$perPage}"); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 
$count = $select->rowCount(); 
+0

所以,從本質上講,你不想讓'WHERE'條款時,不會選擇這兩個下拉菜單,對不對? – BizzyBob

+0

是的,我正在考慮在查詢內部放置一條if語句,以便在property_category上只有當它有一個值時才進行搜索 – DragonFire

+0

聽起來像是一個好主意.. – BizzyBob

回答

0

這似乎是工作

$search = array(
    "select" => "SELECT * FROM tbl_property", 
    "where" => "WHERE property_category='$property_category'", 
); 

if (empty($property_category)) { 
    unset($search["where"]); 
} 

$search = implode(' ', $search); 

$select = $con->prepare($search); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 
$count = $select->rowCount(); 

這似乎也正在

$search = 
    "SELECT * FROM tbl_property " . 
    (empty($property_category) ? "" : "WHERE property_category='$property_category' "); 

$select = $con->prepare($search); 
$select->setFetchMode(PDO::FETCH_ASSOC); 
$select->execute(); 
$count = $select->rowCount(); 

現在的問題是那爲什麼我花很長時間去理解和做事...

0

試試這個:

$where = array(); 
$select_query = "SELECT * FROM tbl_property"; 
if (!empty($property_category)) { 
    $where[] = "property_category='$property_category'"; 
} 
$search_query = $select_query; 
if (!empty($where)) { 
    $search_query = $select_query . " Where " . implode(" ", $where); 
} 

$result = $con->prepare($search_query); 
$result->setFetchMode(PDO::FETCH_ASSOC); 
$result->execute(); 
$count = $select->rowCount();