आइए 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 कन्वर्ट करने के लिए। बिक्री रिपोर्ट संग्रह में भी देखें।
उम्मीद है की वो मदद करदे! शुभकामनाएँ।