我有几个类别:男士,女士,男士,女士和优惠。
每件产品都分配给男士,女士,男士或女士。
有些产品被分配到“优惠”类别。
我需要检索每个“优惠”产品,但按其他类别排序,我的意思是:
商供应 - >家伙的产品 - >女士产品 - >男士用品 - >女性产品
$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() . '-->';
}
现在我正在通过“优惠”类别显示产品,但是这个产品是按名称属性排序的,我需要在名称之前按类别排序的产品。
我怎样才能做到这一点?
答案 0 :(得分: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');