2016-07-25 59 views
1

我設法覆蓋了Mage/Catalog/Model/Config.php並創建了一個方法,添加了一個名爲「Sort By Top Sellers」的新排序選項。如何從上個月的最暢銷產品中挑選Magento產品,基於mysql查詢的樣式?

我還添加了其中聲明,我可以從上月數據,但收集不輸出所有的產品,只是在上個月buyed的那些(我需要的所有產品,排序不僅上個月的)。

查詢輸出正確無其中聲明。

關於如何解決這個問題的任何想法?

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代碼不是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數據庫中,查詢已經花費了驚人的90秒,但我的表格非常龐大,它可能適用於您的實現。

+0

太棒了。謝謝。加工。 –

相關問題