2013-03-20 111 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