Mari kita mulai dengan memikirkan SQL, bukan Magento (kita akan sampai di sana nanti). Saya akan menulisnya (mengabaikan zona waktu untuk kesederhanaan):
SELECT sku,SUM(qty_ordered) FROM sales_flat_order_item
WHERE created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()
GROUP BY sku
Kueri itu berfungsi (saya uji). Jadi, bagaimana kita akan menulis kueri ini di Magento?
- Pertama, kita melihat bahwa semuanya didasarkan pada
sales_flat_order_item
- Magento memiliki koleksi sumber daya khusus untuk tabel ini; kita bisa memanfaatkannya.
- Kami melihat bahwa itu menggunakan
SUM
di salah satu kolom
WHERE
memiliki BETWEEN
klausa - kita mungkin dapat menggunakan Zend_Db_Expr
untuk menampilkan jangka waktu 2 minggu bergulir kustom kami.
- Akhirnya, ia memiliki
GROUP
Mari kita lihat apakah kita tidak bisa menggabungkannya, kemudian, dengan panggilan cepat reset
untuk memastikan bahwa kita hanya mendapatkan kolom yang kita tentukan, dan tidak ada yang lain:
$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'));
Gema sederhana $query->getSelect()
menunjukkan kepada kami bahwa kueri diformat dengan cukup baik:
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`
Pertimbangan lain:
Di masa mendatang, Anda mungkin ingin memfilter laporan ini berdasarkan status pesanan (bergabung ke tabel lain) atau Anda mungkin ingin memastikan bahwa zona waktu akurat (sekarang ini pelaporan berdasarkan GMT).
Bergabung itu sederhana:
->join(array('e' => 'sales_flat_order'),'main_table.order_id = e.entity_id')
Tetapi menambahkan zona waktu bisa menjadi rumit. Lihat Mage_Core_Model_Date
beberapa metode yang mengubah cap waktu ke dan dari GMT. Lihat juga koleksi laporan penjualan.
Semoga itu bisa membantu! Semoga berhasil.