1

男性、女性、男性、女性、オファーなど、いくつかのカテゴリがあります。

すべての製品は、男性、女性、男性または女性のカテゴリに割り当てられています。

また、一部の製品は「オファー」カテゴリに割り当てられています。

すべての「オファー」製品を取得する必要がありますが、他のカテゴリで並べ替える必要があります。つまり、次のようになります。

オファー -> メンズ商品 -> レディース商品 -> メンズ商品 -> レディース商品

$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

1 に答える 1

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フィルターの重複に a を追加することで簡単に防ぐことができます。

下の画像は、コレクションがどのように見えるべきかを示す簡単なモックアップです。これはまだテストする必要があります。これがあなたにとって良い方向へのガイダンスになることを願っています。

$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');
于 2012-07-23T21:54:10.323 に答える