Scopri quante volte è stato ordinato un prodotto


9

Sto cercando di scoprire quante volte un prodotto è stato ordinato nelle ultime due settimane. Finora ho un ciclo per ottenere i prodotti.

    foreach($productCollection as $product){

    }

Presumo che dovrei essere in grado di ottenere i dettagli dell'ordine con questo inserito all'interno del loop

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

Non sono sicuro di come filtrare questo. So che deve essere filtrato per ID prodotto e anche l'ordine deve essere stato effettuato nelle ultime 2 settimane.

Come dovrebbe essere la sintassi per questa query, per favore?


Hai accesso a MySQL per eseguire una semplice query o vuoi creare alcune funzionalità in Magento?
Brentwpeterson,

Sfortunatamente non posso fare una query MySQL. Fondamentalmente è per funzionalità e sarebbe meglio se funzionasse usando solo php
Develophper

Risposte:


21

Cominciamo pensando all'SQL, non a Magento (ci arriveremo più avanti). Lo scriverei come tale (ignorando i fusi orari per semplicità):

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

Quella query funziona (ho testato). Quindi, come potremmo scrivere questa query in Magento?

  • In primo luogo, vediamo che è interamente basato su sales_flat_order_item- Magento ha una raccolta di risorse speciali per questa tabella; possiamo farne uso.
  • Vediamo che usa a SUMin una delle colonne
  • WHEREha una BETWEENclausola - probabilmente possiamo usare Zend_Db_Exprper produrre il nostro periodo di tempo personalizzato di 2 settimane di rolling.
  • Infine, ha un GROUP

Vediamo se non riusciamo a metterlo insieme, quindi, con una breve chiamata a resetper assicurarci di ottenere solo le colonne che definiamo e nient'altro:

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

Una semplice eco di $query->getSelect()ci mostra che la query è formattata abbastanza bene:

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`

Altre considerazioni:

In futuro potresti voler filtrare questo rapporto in base allo stato dell'ordine (unirti a un'altra tabella) o potresti assicurarti che i fusi orari siano accurati (in questo momento è il rapporto basato su GMT).

Partecipare è semplice:

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

Ma l'aggiunta di fusi orari può diventare complicata. Cerca Mage_Core_Model_Datealcuni metodi che convertano i timestamp da e verso GMT. Guarda anche nella raccolta dei rapporti sulle vendite.

Spero che aiuti! Buona fortuna.


1
hai ragione. In questo modo il caricamento di qualsiasi classe Magento sarebbe eccessivo
Sander Mangel

Vedi il mio aggiornamento - ho dimenticato di includere ciò che $queryera!
Filwinkle,

Un altro aggiornamento per sostituire l' importo in dollari per la quantità acquistata.
Filwinkle,

Grazie mille @philwinkle .. Ho personalizzato la tua soluzione secondo le mie esigenze. Grazie ancora.
Pavan Kumar,

può ottenere solo un prodotto configurabile significa che il prodotto genitore non è associato all'ordine e conta quante volte ha venduto
Bhupendra Jadeja
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.