2013-03-20 108 views
1

我似乎無法找出正確的方法來創建一個searchfiltering函數,將一個擴展的WHERE語句推送(正確的單詞?)爲SELECT查詢。用php搜索過濾所選內容

我有這樣的一段代碼,顯示廣告的列表:

$where = isset($catid) ? ' AND ad.category = '.$catid.'' : ''; 

    $row = $db->dbh->query('SELECT ad.*, 
    (SELECT img.image FROM '.$config->db_prefix.'_images AS img 
    WHERE img.aid = ad.aid LIMIT 1) AS img 
    FROM '.$config->db_prefix.'_adverts ad 
    WHERE ad.approved = 1 '.$where.''); 

比方說,我想在一個特定的類別F.X.查看所有廣告電視(編號5),然後在該類別中,我希望顯示給定價格範圍內(100 - 800)內的所有廣告。 我不知道如何擴展我的WHERE語句來處理這個問題,以及我應該如何從我的HTML中完成。 希望我的問題是可以理解的。在廣告表

我的數據庫結構是這樣的:

aid    int(11)  
fid    int(11) 
ad_type   int(11) 
title   varchar(255) 
text   tinytext 
price   decimal(10,2) 
category  int(11) 
friends_allow int(11) 
cr_date   int(11)   
expiry_date  int(11) 
approved  int(1) 
ip    varchar(255) 
email   varchar(255) 
zip_for_pickup int(11) 
views   int(11) 

SOLUTION

$filters = array(); 

if(!empty($post_fields['cat']) && $post_fields["cat"] != "all") { 
     $category = $post_fields['cat']; 
     $filters[] = '(category = ' . $category .')'; 
    } 

if(!empty($post_fields['search_field'])) { 
    $title_and_text = $post_fields['search_field']; 
    $filters[] = '(title LIKE "%' . $title_and_text .'%" OR text LIKE "%' . $title_and_text .'%")'; 
} 

if(!empty($post_fields['price_min_field'])) { 
    if(!empty($post_fields['price_max_field'])) { 
     $filters[] = '(price >= '. $post_fields['price_min_field'].' AND price <= '. $post_fields['price_max_field'] .')'; 
    } else { 
     $filters[] = '(price >= '. $post_fields['price_min_field'].')'; 
    }  
} 

if(!empty($post_fields['distance'])) { 
    $adverts = new Adverts(); 
    $filters[] = '('. $adverts->find_geo_location($post_fields["userzip"], $post_fields["distance"]) .')'; 
} 

$filter = implode(' AND ', $filters); 
+0

而你希望我們只是猜測你的數據庫的結構? – Strawberry 2013-03-20 10:39:12

+0

對不起!問題用結構更新。 – 2013-03-20 10:48:13

回答

0

在HTML中發生2個下拉菜單價格從和價格來。 獲取PHP端的選定值。基於該用途級聯。將100和800替換爲選定的值。

$where = isset($catid) ? ' AND ad.category = '.$catid.'' : ''; 

if ($pricefilter) { 
    $where .= 'AND ad.price>100 AND ad.price < 800'; 
} 
+0

如果我使用搜索框並找到 'text LIKE「%'。$ search_string。'%」或標題LIKE「%'。$ search_string。'%」',然後在該結果中又想要過濾器的價格範圍 - 這是我的問題 – 2013-03-20 11:18:02

+0

什麼都可能需要修改您的查詢在某些時候。你必須堅持先前選擇的選項。您必須根據篩選器選擇計劃'$ where'部分。 – Samy 2013-03-20 11:19:22