Drupal → Посчитать число покупок товара
Посчитать число покупок конкретного товара (не дисплея):
$product_id = 123; $query = db_select('field_data_commerce_product', 'fcp'); $query->addExpression('COUNT(*)'); $query->innerJoin('commerce_line_item', 'l', 'l.line_item_id = fcp.entity_id'); $query->innerJoin('commerce_order', 'o', 'o.order_id = l.order_id'); $query->condition('o.status', 'completed'); $query->condition('fcp.commerce_product_product_id', $product_id); $count = $query->execute()->fetchField();
Чтобы посчитать число покупок всех товаров одного дисплея можно обойти товары в цикле и сложить результат прошлого запроса, а можно добавить пару лишних джоинов:
$product_display_nid = 123; $query = db_select('node', 'n'); $query->addExpression('COUNT(*)'); $query->innerJoin('field_data_field_product', 'ffp', 'ffp.entity_id = n.nid'); $query->innerJoin('field_data_commerce_product', 'fcp', 'fcp.commerce_product_product_id = ffp.field_product_product_id'); $query->innerJoin('commerce_line_item', 'l', 'l.line_item_id = fcp.entity_id'); $query->innerJoin('commerce_order', 'o', 'o.order_id = l.order_id'); $query->condition('o.status', 'completed'); $query->condition('n.nid', $product_display_nid); $count = $query->execute()->fetchField();
Запросы актуальны для дефолтных названий полей:
$product_display->field_product
$line_item->commerce_product
Комментарии
Спасибо, сэкономили мне время на написание запроса.
Рано обрадовался. Приведенный запрос не считает количество заказанных товаров, а следовательно выдает не верные значения.
То есть, если в заказе скажем 5 штук какого либо товара, приведенный выше запрос посчитает только 1 шт. из этого заказа.
Этот запрос считает с учётом количества заказанных товаров в заказе.
Нашёл еще один баг. В commerce могут быть "осиротевшие" line-items, которые были удалены из заказа, но фактически остались в БД. и их тоже посчитает вышеприведенный запрос. Что бы этого не происходило и в расчёт не брались эти "осиротевшие" line-items пользуемся этим запросом:
Оставить комментарий