ค้นหาจำนวนสินค้าที่สั่งซื้อ


9

ฉันพยายามค้นหาจำนวนครั้งที่สั่งซื้อผลิตภัณฑ์ในช่วงสองสัปดาห์ที่ผ่านมา จนถึงตอนนี้ฉันมีวงจรรับผลิตภัณฑ์

    foreach($productCollection as $product){

    }

ฉันคิดว่าฉันควรจะสามารถรับรายละเอียดการสั่งซื้อด้วยสิ่งนี้ภายในวง

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

ฉันไม่แน่ใจเล็กน้อยเกี่ยวกับวิธีการกรองนี้ ฉันรู้ว่าต้องมีการกรองตามรหัสผลิตภัณฑ์และต้องสั่งซื้อภายใน 2 สัปดาห์ที่ผ่านมา

ไวยากรณ์ควรมีลักษณะอย่างไรสำหรับแบบสอบถามนี้โปรด?


คุณมีการเข้าถึง MySQL เพื่อทำแบบสอบถามง่าย ๆ หรือคุณต้องการใช้ฟังก์ชันบางอย่างใน Magento หรือไม่?
brentwpeterson

น่าเสียดายที่ฉันไม่สามารถสืบค้น MySQL เป็นหลักสำหรับฟังก์ชั่นและมันจะดีที่สุดถ้ามันทำงานโดยใช้ PHP เท่านั้น
พัฒนาชั่วโมง

คำตอบ:


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- วีโอไอพีมีการรวบรวมทรัพยากรพิเศษสำหรับตารางนี้ เราสามารถใช้ประโยชน์จากสิ่งนั้นได้
  • เราเห็นว่ามันใช้SUMหนึ่งในคอลัมน์
  • 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 ใด ๆ ก็จะเสร็จสมบูรณ์มากเกินไป
Sander Mangel

ดูการอัปเดตของฉัน - ลืมที่จะรวมสิ่งที่$queryเป็น!
philwinkle

การปรับปรุงอื่นเพื่อทดแทนจำนวนเงินดอลลาร์สำหรับจำนวนที่ซื้อ
philwinkle

ขอบคุณมาก @philwinkle .. ฉันได้ปรับแต่งคุณทางออกในความต้องการของฉัน ขอบคุณอีกครั้ง.
Pavan Kumar

สามารถรับเฉพาะผลิตภัณฑ์ที่กำหนดค่าได้หมายความว่าผลิตภัณฑ์แม่ไม่เกี่ยวข้องกับการสั่งซื้อและนับจำนวนเวลาที่ขาย
Bhupendra Jadeja
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.