Bir ürünün kaç kez sipariş edildiğini öğrenin


9

Son iki hafta içinde bir ürünün kaç kez sipariş edildiğini öğrenmeye çalışıyorum. Şimdiye kadar ürünleri almak için bir döngü var.

    foreach($productCollection as $product){

    }

Döngünün içine yerleştirilen sipariş ayrıntılarını alabilmem gerektiğini varsayıyorum

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

Bunu nasıl filtreleyeceğim konusunda biraz emin değilim. Ürün kimliği ile filtrelenmesi gerektiğini ve siparişin son 2 hafta içinde yapılmış olması gerektiğini biliyorum.

Bu sorgu için sözdizimi nasıl olmalıdır, lütfen?


Basit bir sorgu yapmak için MySQL erişiminiz var mı veya Magento'da bazı işlevler mi yapmak istiyorsunuz?
— brentwpeterson

Maalesef bir MySQL sorgusu yapamıyorum. Temelde işlevsellik içindir ve sadece php kullanarak çalışsaydı en iyisi olurdu
— developphper

Yanıtlar:


21

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.
  • SUMSütunlardan birinde a kullandığını görüyoruz
  • WHEREbir BETWEENcü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, resetsadece 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_DateZaman 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.


1
haklısın. Bu şekilde herhangi bir Magento sınıfını yüklemek tamamen aşırıya kaçabilir
— Sander Mangel

Güncellememe bakın - ne olduğunu eklemeyi unuttum $query!
— philwinkle

Satın alınan miktarın dolar miktarının yerine başka bir güncelleme .
— philwinkle

Çok teşekkürler @philwinkle .. Size ihtiyacım doğrultusunda çözüm özelleştirdim. Tekrar teşekkürler.
— Pavan Kumar

sadece yapılandırılabilir ürün alabilirsiniz siparişten ilişkili olmayan ana ürün anlamına gelir ve kaç kez sattığını saymak
— Bhupendra Jadeja
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.