2012-07-22 23 views
-1

我正在嘗試爲opencart進行動態產品過濾,其中用戶可以添加過濾器,將它們分配給類別併爲產品分配過濾器值。用於opencart的MySQL和PHP產品過濾

目前,我有這些MySQL表:

  1. 過濾器 - ID名稱
  2. Filters_categories - ID過濾器_id CATEGORY_ID
  3. Filters_values - ID過濾器_id值
  4. Filters_products - ID過濾器_id VALUE_ID PRODUCT_ID

問題是這種結構,我不能獲得產品時,超過o ne過濾器被激活,因爲我得到MySQL查詢,看起來像這樣:

SELECT product_id FROM Filters_products WHERE ((name_id='1' OR name_id='2') AND filter_id='1') AND ((name_id='3' OR name_id='4') AND filter_id='2') 

而且它沒有任何意義。我無法弄清楚我應該如何改變我的數據庫結構以使動態過濾成爲可能。我怎樣才能解決這種情況? 謝謝。

回答

0

SELECT PRODUCT_ID FROM Filters_products WHERE(screen_id = '1' OR screen_id = '2')和(CONNECTION_ID = '1')

+0

謝謝你的回答!但我需要使用「AND」。如果連接:3g和屏幕尺寸:2「,3」被選中,那麼我想選擇具有3g連接並具有2「或3」屏幕的產品。 – user1481807 2012-07-22 10:15:42

0

in /catalog/model/catalog/product.php find line nr。 91並代替「if {}」擋住這個代碼...

if (!empty($data['filter_category_id'])) { 
     if (!empty($data['filter_sub_category'])) { 
      $sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'"; 
     } else { 
      $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";    
     } 

     if (!empty($data['filter_filter'])) { 
      $implode = array(); 

      $filters = explode(',', $data['filter_filter']); 

      foreach ($filters as $filter_id) { 

       $filterSQL = $this->db->query("SELECT * FROM " . DB_PREFIX . "filter WHERE filter_id = ". $filter_id); 

       $implode[$filterSQL->row['filter_group_id']][] = (int)$filter_id; 

      } 

      foreach($implode AS $implode2) { 

       $sql .= " AND ("; 
        foreach($implode2 AS $filterID) { 
         $sql .= "(SELECT count(*) FROM product_filter WHERE product_filter.product_id=p.product_id AND product_filter.filter_id=$filterID) OR "; 
        } 
        $sql = substr($sql, 0, -4); 
       $sql .= ")"; 
      } 

     } 
    } 
+0

你能解釋一下這段代碼做了什麼? – Korcholis 2013-01-24 22:35:57