Magento 1.7.0.2按多个类别筛选 - SQL错误

时间:2012-11-08 09:12:02

标签: magento magento-1.7

参考 Magento 1.7 Filter products by multiple categories 我有一个新问题:

我正在使用Magento 1.7.0.2,所描述的解决方案通过多个类别(通过AND)过滤产品集合对我来说不起作用。

我的类别结构:

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

例如,产品可以同时在猫1a,猫2和猫2b中。 它应该列出,如果我过滤:

  • 在cat 1a之后
  • 在cat 1a& cat 2
  • 在cat 1a& 2b& 2

如果我过滤了,则必须

  • 在cat 3之后
  • 在猫1&之后cat 1a
  • 在cat 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))

我要做些什么来完成这项工作?

2 个答案:

答案 0 :(得分:0)

您的电话中缺少一个数组:

->addAttributeToFilter('category_id', array(
     array('finset' => array(53, 46)),
 )

答案 1 :(得分:0)

几天后,我想出了一个达到目标的方法。 神奇的词:自定义SQL查询。

以下是一个SQL语句(MySQL)示例,用于一次过滤多个类别的所有product_id。

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