2012-07-23 95 views
1

我有几个类别:男士,女士,男士,女士和优惠。我不能按产品类别分类产品id

每个产品都分配给男士,女士,男士或女士类别。

而有些产品被分配到“报价”类别。

我需要检索每一个“优惠”产品,但排序其他类别,我的意思是:

优惠 - >家伙产品 - >女装产品 - >男装产品 - >女性产品

$collection = Mage::getResourceModel('catalog/product_collection') 
     ->addAttributeToSort('category_ids', 'ASC') 
     ->addAttributeToSelect(array('name', 'sku', 'status', 'visibility', 'is_saleable')); 

    foreach ($_productCollection as $_product) { 
     echo "<!-- " . $_product->getName() . '-->'; 
    } 

现在我正在通过类别“offers”显示产品,但这个产品是按名称排序的,我需要这些产品按名称排序。

我该如何做到这一点?

+0

我看到两种方法来实现它,但没有一个漂亮。您可以为每个次要类别获取4个不同的收藏集,或者浏览您的收藏集,查询每个产品的类别,然后对您的收藏集进行分类。 – 2012-07-23 20:23:33

回答

1

以下查询将返回所有产品并将它们与类别 - 产品关系表进行连接。它还对category_id和类别内的位置进行排序。

SELECT `e`.* 
FROM `catalog_product_entity` AS `e` 
LEFT JOIN catalog_category_product ON(entity_id=product_id) 
ORDER BY category_id AND position; 

可能发生的唯一情况是您遇到重复产品,因为产品可能位于女士和女士产品类别中。尽管可以通过从查询中删除x.catetgory_id并添加DISTINCT来过滤重复项来简单地阻止此操作。

下面只是一个集合应该是什么样子的快速样机。你仍然需要测试这个。希望这是对你的好方向的指导。

$collection = Mage::getResourceModel('catalog/product_collection') 
    ->addAttributeToSelect('*') 
    ->joinTable('catalog/category_product', 'entity_id=product_id', array('product_id' => 'product_id'), null, 'left') 
    ->addAtributeToSort('category_id');