【问题标题】:How to sort products in Magento by best selling from the last month, mysql query based style?如何通过上个月的畅销产品对 Magento 中的产品进行排序,基于 mysql 查询的样式?
【发布时间】:2016-07-25 13:01:56
【问题描述】:

我设法覆盖了 Mage/Catalog/Model/Config.php 并创建了一个添加新排序选项的方法,称为“按畅销商品排序”。

我还添加了一个 where 语句,我可以在其中获取上个月的数据,但该集合并未输出所有产品,仅输出上个月购买的产品(我需要对所有产品,而不仅仅是上个月的产品)。

如果没有 where 语句,查询输出正确。

关于如何解决这个问题的任何想法?

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

}

【问题讨论】:

  • 好问题。我也需要那个。有这方面的消息吗?

标签: mysql magento magento-1.7


【解决方案1】:

在回复评论或答案之间争论了一段时间,因为我不是 100% 确定 Magento 代码。

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 添加到 where,但这将比另一个连接条件花费更长的时间,并且在我的 Magento DB 中,查询已经花费了惊人的 90 秒,但我的表很大,它可能适用于您的实施。

【讨论】:

  • 太棒了。谢谢你。工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
相关资源
最近更新 更多