我已经尝试了几天来获得关于如何按2个或更多类别过滤产品集合的清洁解决方案。产品应该属于A类和B类,而不属于任何类别。 我尝试过在互联网上找到的多种解决方案但没有成功。到目前为止我找到的唯一解决方法(但我找不到它)是使用原始查询然后从ID中获取集合:
SELECT e.entity_id FROM catalog_product_entity AS e INNER JOIN catalog_category_product AS ccp on ccp.product_id=e.entity_id where ccp.category_id =100 or ccp.category_id = 101 group by entity_id having count(*) > 1
这将返回在类别100和101中找到的产品列表。 但是,我希望实际上有一个“Magento方式”或者这样做而不需要执行原始查询。有人知道这个吗?
由于
答案 0 :(得分:4)
经过漫长的一夜工作后,我终于找到了合适的解决方案:
$cat_ids = array(4,5,6);
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
->addAttributeToFilter('category_id', array('in' => array('finset' => $cat_ids)))
->getSelect()
->group('entity_id')
->having('count(*) = ' . count($cat_ids));
你去吧。以上内容将返回同时属于所有类别的所有产品。感谢activeDev和Jurgen的帮助。
答案 1 :(得分:0)
这应该可以正常工作。
$collection = Mage::getModel('catalog/product')
->getCollection()
->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
->addAttributeToFilter('category_id', array('in' => array('finset' => '36,37')))
->addAttributeToSelect('*')
->setPageSize(5);
这来自http://blog.chapagain.com.np/magento-how-to-filter-product-collection-using-2-or-more-category-filters/,但似乎有些过时了。
我无法确认这是否适用于我当前不包含任何类别的版本。但是我按照预期得到了一个空集合,所以让我知道!