Descubra quantas vezes um produto foi encomendado

9

Estou tentando descobrir quantas vezes um produto foi encomendado nas últimas duas semanas. Até agora, tenho um loop para obter os produtos.

    foreach($productCollection as $product){

    }

Eu suponho que eu deveria ser capaz de obter os detalhes do pedido com este colocado dentro do loop

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

Estou um pouco inseguro sobre como filtrar isso. Sei que ele precisa ser filtrado por ID do produto e também o pedido deve ter sido feito nas últimas duas semanas.

Como deve ser a sintaxe desta consulta, por favor?

develophper
fonte
Você tem acesso ao MySQL para fazer uma consulta simples ou deseja fazer alguma funcionalidade no Magento?
brentwpeterson
Infelizmente não posso fazer uma consulta ao MySQL. Essencialmente é para a funcionalidade e que seria melhor se ele trabalhou usando apenas php
develophper

Respostas:

21

Vamos começar pensando no SQL, não no Magento (chegaremos lá mais tarde). Eu escreveria como tal (ignorando os fusos horários por simplicidade):

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

Essa consulta funciona (eu testei). Então, como é que vamos escrever essa consulta no Magento?

  • Primeiramente, vemos que é totalmente baseado sales_flat_order_item- o Magento possui uma coleção de recursos especiais para esta tabela; nós podemos fazer uso disso.
  • Vemos que ele usa a SUMem uma das colunas
  • WHEREpossui uma BETWEENcláusula - provavelmente podemos usar Zend_Db_Exprpara gerar nosso período de rolagem personalizado de duas semanas.
  • Finalmente, tem um GROUP

Vamos ver se não conseguimos montar tudo, então, com uma chamada rápida resetpara garantir que apenas recebamos as colunas que definimos e nada mais:

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

Um simples eco $query->getSelect()mostra que a consulta está formatada muito bem:

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`

Outras considerações:

No futuro, você pode filtrar este relatório com base no status do pedido (ingressando em outra tabela) ou pode ter certeza de que os fusos horários estão corretos (no momento, são relatórios baseados no GMT).

A união é simples:

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

Mas adicionar fusos horários pode ser complicado. Procure Mage_Core_Model_Datealguns métodos que convertem carimbos de data e hora de e para GMT. Examine também a coleção de relatórios de vendas.

Espero que ajude! Boa sorte.

philwinkle
fonte
11
você está certo. Desta forma, o carregamento quaisquer classes Magento seria um exagero completo
Sander Mangel
Veja minha atualização - esqueci de incluir o que $queryera!
philwinkle
Outra atualização para substituir a quantia em dólares pela quantidade comprada.
philwinkle
Muito obrigado @philwinkle .. Eu personalizei sua solução em minha exigência. Agradeço novamente.
Pavan Kumar 13/03
pode obter apenas produto pai meios produtos configurável não associadas da ordem e contar quantas tempo que vendeu
Bhupendra Jadeja