पता लगाएं कि किसी उत्पाद को कितनी बार ऑर्डर किया गया था


9

मैं यह पता लगाने की कोशिश कर रहा हूं कि पिछले दो हफ्तों में कितनी बार किसी उत्पाद का ऑर्डर दिया गया था। अब तक मेरे पास उत्पादों को प्राप्त करने वाला एक लूप है।

    foreach($productCollection as $product){

    }

मुझे लगता है कि मुझे लूप के अंदर रखे आदेश के साथ विवरण प्राप्त करने में सक्षम होना चाहिए

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

मैं इस बारे में थोड़ा अनिश्चित हूं कि इसे कैसे फ़िल्टर किया जाए। मुझे पता है कि इसे उत्पाद आईडी द्वारा फ़िल्टर करने की आवश्यकता है और यह भी आदेश पिछले 2 सप्ताह के भीतर किया जाना चाहिए।

कृपया इस क्वेरी के लिए सिंटैक्स कैसा दिखना चाहिए?


क्या आपके पास एक सरल क्वेरी करने के लिए MySQL तक पहुंच है या आप Magento में कुछ कार्यक्षमता बनाना चाहते हैं?
ब्रेंटवेटपर्सन

दुर्भाग्य से मैं एक MySQL क्वेरी नहीं कर सकता। अनिवार्य रूप से यह कार्यक्षमता के लिए है और यह सबसे अच्छा होगा अगर यह केवल php का उपयोग करके काम करे
विकासशील

जवाबों:


21

आइए SQL के बारे में सोचने के साथ शुरू करें, न कि मैगेंटो (हम बाद में वहां पहुंचेंगे)। मैं इसे इस तरह लिखूंगा (सादगी के लिए टाइमज़ोन की अनदेखी):

SELECT sku,SUM(qty_ordered) FROM sales_flat_order_item
WHERE created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()
GROUP BY sku

वह क्वेरी काम करती है (मैंने परीक्षण किया)। तो, हम इस प्रश्न को मैगेंटो में लिखने के बारे में कैसे जाएंगे?

  • सबसे पहले, हम देखते हैं कि यह पूरी तरह से आधारित है sales_flat_order_item- मैगेंटो के पास इस तालिका के लिए एक विशेष संसाधन संग्रह है; हम उस का उपयोग कर सकते हैं।
  • हम देखते हैं कि यह एक SUMकॉलम में से एक का उपयोग करता है
  • WHEREएक BETWEENखंड है - हम शायद Zend_Db_Exprअपने कस्टम रोलिंग 2-सप्ताह के समय-सीमा का उत्पादन करने के लिए उपयोग कर सकते हैं ।
  • अंत में, यह एक है GROUP

आइए देखें कि क्या हम इसे एक साथ नहीं रख सकते हैं, फिर, resetयह सुनिश्चित करने के लिए एक त्वरित कॉल के साथ कि हम केवल उन स्तंभों को प्राप्त करते हैं जिन्हें हम परिभाषित करते हैं, और कुछ नहीं:

$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'));

एक सरल प्रतिध्वनि $query->getSelect()हमें दिखाती है कि क्वेरी को अच्छी तरह से स्वरूपित किया गया है:

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`

अन्य बातें:

भविष्य में आप ऑर्डर की स्थिति (किसी अन्य तालिका में शामिल होने) के आधार पर इस रिपोर्ट को फ़िल्टर करना चाह सकते हैं या आप यह सुनिश्चित करना चाहते हैं कि समय क्षेत्र सटीक हो (अभी यह GMT पर आधारित रिपोर्टिंग है)।

जुड़ना सरल है:

->join(array('e' => 'sales_flat_order'),'main_table.order_id = e.entity_id')

लेकिन समय क्षेत्र जोड़ने से जटिल हो सकते हैं। में देखो Mage_Core_Model_Dateकुछ तरीकों कि करने के लिए और GMT से timestamps कन्वर्ट करने के लिए। बिक्री रिपोर्ट संग्रह में भी देखें।

उम्मीद है की वो मदद करदे! शुभकामनाएँ।


1
आप सही हे। इस तरह किसी भी Magento वर्गों लोड हो रहा है पूरा overkill होगा
Sander Mangel

मेरा अपडेट देखें - जो $queryथा उसे शामिल करना न भूलें!
फिल्हाल

खरीदी गई मात्रा के लिए डॉलर की राशि को बदलने के लिए एक और अपडेट ।
philwinkle

बहुत बहुत धन्यवाद @philwinkle .. मैंने अपनी आवश्यकता में आपको समाधान अनुकूलित किया है। एक बार फिर आपका धन्यवाद।
पावन कुमार

केवल विन्यास योग्य उत्पाद प्राप्त कर सकते हैं, मूल उत्पाद ऑर्डर से जुड़ा नहीं है और यह
बताएं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.