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.