製品が注文された回数を確認する


9

過去2週間に製品が注文された回数を調べようとしています。これまでのところ、製品を取得するループがあります。

    foreach($productCollection as $product){

    }

これをループ内に配置すると、注文の詳細を取得できるはずです

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

これをフィルタリングする方法については、少しわかりません。商品IDでフィルタリングする必要があることと、注文が過去2週間以内に行われたことを知っています。

このクエリの構文はどのように見えるべきですか?


MySQLにアクセスして簡単なクエリを実行しますか、それともMagentoでいくつかの機能を作成しますか?
brentwpeterson 2013

残念ながら、MySQLクエリは実行できません。本質的には機能性のためであり、それがphpのみを使用して機能した場合に最適です
developerhper

回答:


21

Magentoではなく、SQLについて考えることから始めましょう(後で説明します)。私はそれをそのように記述します(単純化のためにタイムゾーンは無視します):

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

そのクエリは機能します(テストしました)。では、このクエリをMagentoで作成するにはどうすればよいでしょうか。

  • まず、完全に基づいていることがわかりますsales_flat_order_item。Magentoには、このテーブル用の特別なリソースコレクションがあります。それを活用できます。
  • SUM列の1つでa を使用していることがわかります
  • 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からのタイムスタンプを変換するいくつかの方法について。また、販売レポートのコレクションも確認してください。

お役に立てば幸いです。幸運を祈ります。


1
あなたが正しい。このようにMagentoクラスをロードすると、やり過ぎになります
Sander Mangel

私の更新を参照してください-何を含めるのを忘れまし$queryた!
philwinkle 2013

購入した数量をドルに置き換える別のアップデート。
philwinkle 2013

本当にありがとう@philwinkle ..私は私の要件であなたのソリューションをカスタマイズしました。もう一度ありがとうございます。
Pavan Kumar

構成可能な製品のみを取得できるということは、注文から関連付けられていない親製品を意味し、それが販売された回数をカウントします
Bhupendra Jadeja '31
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.