Cari tahu berapa kali suatu produk dipesan

9

Saya mencoba mencari tahu berapa kali suatu produk dipesan selama dua minggu terakhir. Sejauh ini saya memiliki loop mendapatkan produk.

    foreach($productCollection as $product){

    }

Saya berasumsi saya harus bisa mendapatkan detail pesanan dengan ini ditempatkan di dalam loop

    $order_items = Mage::getResourceModel('sales/order_item_collection')

Saya sedikit tidak yakin tentang cara memfilter ini. Saya tahu bahwa itu perlu disaring oleh id produk dan juga pesanan harus sudah dibuat dalam 2 minggu terakhir.

Seperti apa seharusnya sintaks untuk query ini?

pemburu
sumber
Apakah Anda memiliki akses ke MySQL untuk melakukan kueri sederhana atau Anda ingin membuat beberapa fungsi di Magento?
brentwpeterson
Sayangnya saya tidak bisa melakukan permintaan MySQL. Pada dasarnya ini untuk fungsionalitas dan akan lebih baik jika bekerja hanya menggunakan php
develophper

Jawaban:

21

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 SUMdi salah satu kolom
  • WHEREmemiliki BETWEENklausa - kita mungkin dapat menggunakan Zend_Db_Expruntuk menampilkan jangka waktu 2 minggu bergulir kustom kami.
  • Akhirnya, ia memiliki GROUP

Mari kita lihat apakah kita tidak bisa menggabungkannya, kemudian, dengan panggilan cepat resetuntuk 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_Datebeberapa metode yang mengubah cap waktu ke dan dari GMT. Lihat juga koleksi laporan penjualan.

Semoga itu bisa membantu! Semoga berhasil.

Philwinkle
sumber
1
kamu benar. Dengan cara ini, memuat semua kelas Magento akan menjadi terlalu banyak
Sander Mangel
Lihat pembaruan saya - lupa menyertakan apa yang $queryada!
philwinkle
Pembaruan lain untuk menggantikan jumlah dolar untuk jumlah yang dibeli.
philwinkle
Terima kasih banyak @ philwinkle .. Saya telah menyesuaikan solusi Anda dengan kebutuhan saya. Terima kasih sekali lagi.
Pavan Kumar
hanya bisa mendapatkan produk yang dapat dikonfigurasi yang berarti produk induk yang tidak terkait dengan pesanan dan menghitung berapa kali terjual
Bhupendra Jadeja