2016-07-25 3 views
1

私は、Mage/Catalog/Model/Config.phpを上書きし、 "Sort By Top Sellers"という新しいソートオプションを追加する方法を作りました。Magentoで商品を並べ替えるにはどうすればいいですか?

私は先月からデータを取得できますが、コレクションはすべての製品を出力しません。先月購入したものだけです(私はすべての製品を並べ替える必要があるだけでなく先月からのもの)。

のないクエリの出力結果は、となります。

これを解決する方法はありますか?

public function sortByTopSelling($dir){ 
    $today = time(); 
    $last = $today - (60*60*24*30); 
    $from = date("Y-m-d H:i:s", $last); 
    $to = date("Y-m-d H:i:s", $today); 

    $this->getSelect()->joinLeft('sales_flat_order_item AS order_item','e.entity_id = order_item.product_id', 
    'SUM(order_item.qty_ordered) AS ordered_qty')->where('`order_item`.`created_at` > "'.$from.'"')->group('e.entity_id')->order('ordered_qty DESC'); 

} 
+0

良い質問です。私もそれが必要です。これに関するニュースはありますか? –

答えて

1

私はMagento Codeで100%確信していないため、コメントまたは回答として返信することをお勧めします。

MYSQL:

select e.entity_id, SUM(order_item.qty_ordered) AS ordered_qty 
from magento.catalog_product_entity as e 
left join magento.sales_flat_order_item AS order_item on e.entity_id = order_item.product_id and order_item.created_at > DATE_FORMAT(NOW() ,'%Y-%m-01') 
group by e.entity_id 
order by ordered_qty DESC; 

私はMagentoのコードをテストするための信頼できる方法はありませんが、それはの線に沿って何かする必要があります。それを行うために他の方法

$this->getSelect()->joinLeft('sales_flat_order_item AS order_item',"e.entity_id = order_item.product_id and order_item.created_at > $from", 
    'SUM(order_item.qty_ordered) AS ordered_qty')->group('e.entity_id')->order('ordered_qty DESC'); 

その場所にor order_item.created_at is nullを追加することになりますが、これは別の結合条件よりも実行に時間がかかり、Magento DBではクエリはすでに90秒の時間がかかりますが、テーブルが大量であり、

+0

ありがとうございました。ワーキング。 –

関連する問題