参考 Magento 1.7 Filter products by multiple categories 我有一个新问题:
我正在使用Magento 1.7.0.2,所描述的解决方案通过多个类别(通过AND)过滤产品集合对我来说不起作用。
我的类别结构:
例如,产品可以同时在猫1a,猫2和猫2b中。 它应该列出,如果我过滤:
如果我过滤了,则必须不:
我的代码:
$_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))
我要做些什么来完成这项工作?
答案 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