2

Magento 1.7を参照し て、複数のカテゴリ で製品をフィルタリングする 新しい質問があります:

私は Magento 1.7.0.2 を使用していますが、(AND を介して) 複数のカテゴリで製品コレクションをフィルター処理するための説明されているソリューションが機能しません。

私のカテゴリ構造:

    • 猫 1
      • 猫1a
      • 猫1b
    • 猫 2
      • 猫2a
      • 猫2b
    • 猫 3

たとえば、製品は、同時にカテゴリ 1a、カテゴリ 2、およびカテゴリ 2b に存在する可能性があります。フィルタリングすると、リストされるはずです:

  • 猫1aの後
  • 猫 1a & 猫 2 の後
  • 猫 1a & 2b & 2 の後

フィルタリングすると、表示されてはなりません。

  • 猫3の後
  • 猫 1 & 猫 1a の後
  • 猫 1a & 2a の後

私のコード:

$_productCollection = Mage::getModel('catalog/product')
        ->getCollection()
        ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
        ->addAttributeToSelect('*')
        ->addAttributeToFilter('category_id',
            array("finset" => array(53, 46))
        );

これにより、SQLエラーが発生します。

#1582 - Incorrect parameter count in the call to native function 'FIND_IN_SET'
SELECT `e`.*, `at_category_id`.`category_id` FROM `catalog_product_entity` AS `e`
LEFT JOIN `catalog_category_product` AS `at_category_id` ON (at_category_id.`product_id`=e.entity_id) WHERE (FIND_IN_SET(53, 46, at_category_id.category_id))

これを機能させるために私がしなければならないことは何ですか?

4

2 に答える 2

0

数日後、目標を達成する方法を見つけました。魔法の言葉: カスタム SQL クエリ。

すべての product_id を一度に複数のカテゴリでフィルター処理する SQL ステートメント (MySQL) のサンプルを次に示します。

SELECT a.product_id as entity_id
    FROM catalog_category_product a
    WHERE EXISTS (SELECT b.product_id
                  FROM catalog_category_product b
                  WHERE b.product_id = a.product_id and b.category_id = 53)
      AND EXISTS (SELECT b.product_id
                  FROM catalog_category_product b
                  WHERE b.product_id = a.product_id and b.category_id = 46)
      AND EXISTS (SELECT b.product_id
                  FROM catalog_category_product b
                  WHERE b.product_id = a.product_id and b.category_id = 39)
    GROUP BY a.product_id

必要に応じて、終末まで「AND EXISTS ...」を繰り返すことができます ;) これは、同時にカテゴリ 53、46、および 39 にあるすべての製品をフィルタリングします。

Magento のカスタム SQL コマンドの詳細については、http: //magentotutorials.blogspot.de/2011/07/magento-code-to-run-custom-sql-query.htmlを参照してください。

于 2012-11-13T14:49:34.317 に答える
0

呼び出しに配列がありません:

->addAttributeToFilter('category_id', array(
     array('finset' => array(53, 46)),
 )
于 2012-11-08T09:24:24.033 に答える