Tìm hiểu bao nhiêu lần một sản phẩm đã được đặt hàng


9

Tôi đang cố gắng tìm hiểu bao nhiêu lần một sản phẩm đã được đặt hàng trong hai tuần qua. Cho đến nay tôi có một vòng lặp nhận được các sản phẩm.

    foreach($productCollection as $product){

    }

Tôi giả sử tôi sẽ có thể nhận được các chi tiết đặt hàng với điều này được đặt trong vòng lặp

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

Tôi không chắc chắn về cách lọc này. Tôi biết rằng nó cần phải được lọc theo id sản phẩm và đơn đặt hàng phải được thực hiện trong vòng 2 tuần qua.

Cú pháp trông như thế nào cho truy vấn này, xin vui lòng?


Bạn có quyền truy cập vào MySQL để thực hiện một truy vấn đơn giản hoặc bạn muốn thực hiện một số chức năng trong Magento?
brentwpeterson

Thật không may, tôi không thể thực hiện một truy vấn MySQL. Về cơ bản, đây là chức năng và sẽ tốt nhất nếu nó chỉ hoạt động khi sử dụng php
Develophper

Câu trả lời:


21

Hãy bắt đầu với suy nghĩ về SQL, không phải Magento (chúng ta sẽ đến đó sau). Tôi sẽ viết nó như vậy (bỏ qua các múi giờ cho đơn giản):

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

Truy vấn đó hoạt động (tôi đã thử nghiệm). Vì vậy, làm thế nào chúng ta sẽ viết về truy vấn này trong Magento?

  • Đầu tiên, chúng tôi thấy rằng nó hoàn toàn dựa trên sales_flat_order_item- Magento có một bộ sưu tập tài nguyên đặc biệt cho bảng này; chúng ta có thể sử dụng điều đó.
  • Chúng tôi thấy rằng nó sử dụng một SUMtrong một trong các cột
  • WHEREcó một BETWEENđiều khoản - có lẽ chúng ta có thể sử dụng Zend_Db_Exprđể xuất khung thời gian 2 tuần tùy chỉnh của mình.
  • Cuối cùng, nó có một GROUP

Chúng ta hãy xem liệu chúng ta không thể kết hợp nó lại với nhau, sau đó, bằng một cuộc gọi nhanh resetđể đảm bảo rằng chúng ta chỉ nhận được các cột mà chúng ta xác định và không có gì khác:

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

Một tiếng vang đơn giản $query->getSelect()cho chúng ta thấy rằng truy vấn được định dạng khá tốt:

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`

Những ý kiến ​​khác:

Trong tương lai, bạn có thể muốn lọc báo cáo này dựa trên trạng thái đơn hàng (tham gia vào bảng khác) hoặc bạn có thể muốn đảm bảo rằng các múi giờ chính xác (ngay bây giờ là báo cáo dựa trên GMT).

Tham gia rất đơn giản:

->join(array('e' => 'sales_flat_order'),'main_table.order_id = e.entity_id')

Nhưng thêm múi giờ có thể trở nên phức tạp. Xem xét Mage_Core_Model_Datemột số phương pháp chuyển đổi dấu thời gian sang và từ GMT. Cũng nhìn vào bộ sưu tập báo cáo bán hàng.

Mong rằng sẽ giúp! May mắn nhất.


1
bạn đúng. Cách này tải bất kỳ lớp Magento nào sẽ là quá mức cần thiết
Sander Mangel

Xem cập nhật của tôi - quên bao gồm những gì $queryđã được!
philwinkle

Một cập nhật khác để thay thế số tiền đô la cho số lượng đã mua.
philwinkle

Cảm ơn rất nhiều @philwinkle .. Tôi đã tùy chỉnh giải pháp cho bạn theo yêu cầu của tôi. Cảm ơn bạn một lần nữa.
Pavan Kumar

chỉ có thể nhận được sản phẩm có thể định cấu hình có nghĩa là sản phẩm mẹ không được liên kết từ đơn đặt hàng và tính số lần bán
Bhupendra Jadeja
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.