2013-04-08 26 views
0

我有一大堆數據(房屋列表)需要用戶可以過濾的能力。最小/最大臥室數量,最小/最大價格範圍,郊區,類型的屬性。選擇一個大列表(帶過濾器)和PDO

我已經創建了一個包含過濾選項的數組,但是隻有在選擇了所有選項的情況下,該查詢才起作用。我需要有能力爲它工作,只有一個選項被選中。

任何想法我應該如何去做呢?

$query = $db->prepare("SELECT *, (SELECT MIN(FileName) as FileName 
        FROM `images` 
        WHERE `images`.`PropertyID` = `property`.`PropertyID` order by `images`.`id` asc) 
        as FileName 
        FROM `property` 
        INNER JOIN `features` ON `property`.`PropertyID` = `features`.`PropertyID` 
        WHERE `property`.`Active` = '1' AND `property`.`homelink` = '0' 
        AND `property`.`Suburb` = :suburb 
        AND `features`.`Bedrooms` >= :bedroom_min 
        AND `features`.`Bedrooms` <= :bedroom_max 
        AND `property`.`Rent` >= :price_min 
        AND `property`.`Rent` <= :price_max 
        AND `property`.`PropertyType` = :property_type 
        GROUP BY `property`.`propertyid` 
        ORDER BY `property`.`AdvHeading` = 'LEASED!' ASC, `property`.`rent` DESC"); 


$vars = array(suburb,bedroom_min,bedroom_max,price_min,price_max,property_type); 
foreach($vars as $key) { 
    ${$key} = (isset($_GET[$key]) === true) ? $_GET[$key] : ''; 
    $query->bindValue(':'.$key.'', ${$key}, PDO::PARAM_STR);  
} 

try { 
    $query->execute(); 

    $rows = $query->fetchAll(PDO::FETCH_ASSOC); 
    echo '<pre>', print_r($rows, true), '</pre>'; 

} 
catch(PDOException $e){ 
    die($e->getMessage()); 
} 

回答

1

您需要動態創建查詢。這裏是一個recent question where you can see an example

請注意,由於不同的比較運算符,你不能將它包裝在循環中。最好手動一個一個,就像引用的問題一樣。

+0

哦,我的!當你得到答案並且當你看到它很明顯時,你不討厭!謝謝你,這會很好地工作 – Ved 2013-04-08 05:56:27