2012-07-23 379 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');