1

展開された WHERE ステートメントを SELECT クエリにプッシュする (正しい単語ですか?) 検索フィルタリング関数を作成する正しい方法を理解できないようです。

広告のリストを表示する次のコードがあります。

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

特定のカテゴリ fx TV (id 5) のすべての広告を表示し、そのカテゴリで特定の価格帯 (100 ~ 800) 内のすべての広告を表示したいとします。これを処理するために WHERE ステートメントを拡張する方法と、HTML からそれを行う方法がわかりません。私の質問が理解できることを願っています。

広告テーブルの私の DB 構造は次のとおりです。

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)

解決

$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); 
4

1 に答える 1

0

HTML では、2 つのドロップダウンの [価格: 開始] と [価格: 終了] を配置します。PHP 側で選択した値を取得します。その使用連結に基づいています。100 と 800 を選択した値に置き換えます。

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

 if ($pricefilter) {
   $where .= 'AND ad.price>100 AND ad.price < 800';
 }
于 2013-03-20T11:15:42.013 に答える