Magento değil, SQL hakkında düşünmeye başlayalım (daha sonra oraya ulaşacağız). Ben böyle yazmak istiyorsunuz (basitlik için zaman dilimleri görmezden):
SELECT sku,SUM(qty_ordered) FROM sales_flat_order_item
WHERE created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()
GROUP BY sku
Bu sorgu çalışıyor (test ettim). Peki, bu sorguyu Magento'da nasıl yazabiliriz?
- İlk olarak, bunun tamamen dayandığını görüyoruz
sales_flat_order_item
- Magento'nun bu tablo için özel bir kaynak koleksiyonu var; bundan faydalanabiliriz.
SUM
Sütunlardan birinde a kullandığını görüyoruz
WHERE
bir BETWEEN
cümle var - muhtemelen Zend_Db_Expr
özel haddeleme 2 haftalık zaman dilimimizi çıkarmak için kullanabiliriz .
- Son olarak,
GROUP
Bakalım bunu bir araya getiremiyoruz, reset
sadece tanımladığımız sütunları aldığımızdan emin olmak için hızlı bir çağrı ile ve başka bir şey yok:
$query = Mage::getResourceModel('sales/order_item_collection');
$query->getSelect()->reset(Zend_Db_Select::COLUMNS)
->columns(array('sku','SUM(row_total)'))
->where(new Zend_Db_Expr('created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()'))
->group(array('sku'));
Basit bir yankı $query->getSelect()
, sorgunun oldukça iyi biçimlendirildiğini gösterir:
SELECT `main_table`.`sku`, SUM(qty_ordered) FROM `sales_flat_order_item` AS `main_table` WHERE (created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()) GROUP BY `sku`
Dikkat edilecek diğer noktalar:
Gelecekte bu raporu sipariş durumuna göre filtrelemek isteyebilirsiniz (başka bir tabloya katılarak) veya saat dilimlerinin doğru olduğundan emin olmak isteyebilirsiniz (şu anda GMT'ye göre raporlama yapıyor).
Katılmak basit:
->join(array('e' => 'sales_flat_order'),'main_table.order_id = e.entity_id')
Ancak zaman dilimleri eklemek karmaşıklaşabilir. Mage_Core_Model_Date
Zaman damgalarını GMT'ye ve GMT'den dönüştüren bazı yöntemlere bakın . Ayrıca satış raporları koleksiyonuna bakın.
Umarım yardımcı olur! İyi şanslar.