【问题标题】:I can't sort product collection by category id我无法按类别 ID 对产品集合进行排序
【发布时间】:2012-07-22 01:28:32
【问题描述】:

我有几个类别:男士、女士、男士、女士和优惠。

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

有些产品被分配到“优惠”类别。

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

优惠 -> 男士产品 -> 女士产品 -> 男士产品 -> 女性产品

$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() . '-->';
    }

现在我正在让产品按“优惠”类别显示,但这些产品是按名称属性排序的,我需要在名称之前按类别排序的产品。

我怎样才能做到这一点?

【问题讨论】:

  • 我看到了两种方法来实现它,但没有一个是漂亮的。要么为每个次要类别获取 4 个不同的集合,要么浏览您的集合,查询每个产品的类别,然后重新选择您的集合。

标签: php magento magento-1.6


【解决方案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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2015-12-31
    • 2013-01-15
    • 1970-01-01
    相关资源
    最近更新 更多