Beginnen wir mit dem Nachdenken über SQL und nicht über Magento (wir werden später darauf zurückkommen). Ich würde es als solches schreiben (der Einfachheit halber Zeitzonen ignorieren):
SELECT sku,SUM(qty_ordered) FROM sales_flat_order_item
WHERE created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()
GROUP BY sku
Diese Abfrage funktioniert (ich habe getestet). Wie würden wir diese Abfrage in Magento schreiben?
- Erstens sehen wir, dass es vollständig auf
sales_flat_order_item
- Magento hat eine spezielle Ressourcensammlung für diese Tabelle; davon können wir Gebrauch machen.
- Wir sehen, dass es
SUM
in einer der Spalten ein verwendet
WHERE
hat eine BETWEEN
Klausel - wir können wahrscheinlich verwenden, Zend_Db_Expr
um unseren benutzerdefinierten rollierenden 2-Wochen-Zeitrahmen auszugeben.
- Schließlich hat es eine
GROUP
Mal sehen, ob wir es nicht zusammenstellen können, mit einem kurzen Aufruf reset
, um sicherzustellen, dass wir nur die von uns definierten Spalten erhalten und sonst nichts:
$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'));
Ein einfaches Echo von $query->getSelect()
zeigt uns, dass die Abfrage recht gut formatiert ist:
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`
Weitere Überlegungen:
In Zukunft möchten Sie diesen Bericht möglicherweise basierend auf dem Auftragsstatus filtern (Verknüpfung mit einer anderen Tabelle) oder sicherstellen, dass die Zeitzonen korrekt sind (derzeit basiert die Berichterstellung auf GMT).
Der Beitritt ist einfach:
->join(array('e' => 'sales_flat_order'),'main_table.order_id = e.entity_id')
Das Hinzufügen von Zeitzonen kann jedoch kompliziert werden. Suchen Sie nach Mage_Core_Model_Date
Methoden, mit denen Zeitstempel von und nach GMT konvertiert werden. Schauen Sie sich auch die Sammlung der Verkaufsberichte an.
Ich hoffe, das hilft! Viel Glück.