找出订购产品的次数


9

我试图找出过去两个星期订购产品的次数。到目前为止,我已经获得了产品的循环。

    foreach($productCollection as $product){

    }

我认为我应该能够将订单详细信息放置在循环中

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

我不太确定如何过滤此内容。我知道它需要按产品ID进行过滤,并且订单必须在最近2周内完成。

请问该查询的语法应该是什么样的?


您是否可以使用MySQL进行简单查询,还是要在Magento中进行某些功能?
brentwpeterson

不幸的是,我无法执行MySQL查询。本质上,它是功能性和它的工作只使用PHP这将是最好的
develophper

Answers:


21

让我们先考虑一下SQL,而不是Magento(稍后再讨论)。我会这样写(为简单起见忽略时区):

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在其中一列中使用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的类将是完整的矫枉过正
桑德甜菜

查看我的更新-忘了包含什么$query
philwinkle 2013年

另一种更新是用美元金额代替购买的数量。
philwinkle

非常感谢@philwinkle ..我已根据您的要求定制了您的解决方案。再一次谢谢你。
Pavan Kumar 2014年

只能获得可配置的产品,这意味着父产品与订单没有关联,并计算了售出的时间
Bhupendra Jadeja
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.