0

ユーザーがフィルターを追加し、それらをカテゴリに割り当て、製品にフィルター値を割り当てることができるopencartの動的製品フィルタリングを作成しようとしています。

現在、これらのmysqlテーブルがあります:

  1. フィルタ - ID NAME
  2. Filters_categories - ID FILTER_ID CATEGORY_ID
  3. Filters_values - ID FILTER_ID VALUE
  4. Filters_products - ID FILTER_ID VALUE_ID PRODUCT_ID

問題は、次のような 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')

そして、それは意味がありません。データベース構造を変更して動的フィルタリングを可能にする方法がわかりません。どうすればこの状況を解決できますか? ありがとうございました。

4

3 に答える 3

0

この素晴らしい拡張機能を使用して、

http://www.opencart.com/index.php?route=extension/extension/info&extension_id=10098

お役に立てれば。

于 2013-01-17T11:59:41.357 に答える
0

in file /catalog/model/catalog/product.php find line nr. 91 and replace "if {}" block whit this code...

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 .= ")";
            }

        }
    }
于 2013-01-24T22:12:37.247 に答える
0

SELECT product_id FROM Filters_products WHERE (screen_id='1' OR screen_id='2') and (connection_id='1')

于 2012-07-22T09:57:48.853 に答える