Дізнайтеся, скільки разів замовляли товар


9

Я намагаюся з’ясувати, скільки разів замовляли товар за останні два тижні. Поки що у мене є петля отримання продуктів.

    foreach($productCollection as $product){

    }

Я припускаю, що я маю змогу отримати деталі замовлення, розміщені всередині циклу

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

Я трохи не впевнений у тому, як це відфільтрувати. Я знаю, що його потрібно відфільтрувати за ідентифікатором продукту, а також замовлення повинно бути зроблено протягом останніх 2 тижнів.

Як повинен виглядати синтаксис цього запиту?


У вас є доступ до MySQL, щоб зробити простий запит або ви хочете внести деякі функції в Magento?
brentwpeterson

На жаль, я не можу виконати запит MySQL. По суті, це для функціональності, і було б найкраще, якби він працював лише за допомогою php
develophper

Відповіді:


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в одному з стовпців
  • 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 .. Я налаштував вам рішення в моїй вимозі. Ще раз дякую
Паван Кумар

Ви можете отримати лише налаштований продукт означає батьківський продукт, не пов’язаний із замовленням, і порахувати, скільки часу він продається
Bhupendra Jadeja
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.