2016-03-03 3 views
0

Im, ищущий SQL-запрос, чтобы напрямую получить список наших самых продаваемых продуктов (по заказу по количеству или по количеству - не имеет значения). Это кажется сложнее, чем я думал ...Magento: Как запросить (SQL) верхние продажи продуктов?

Поиск с помощью Google только находит решения для PHP-модулей и т. Д. - но я хочу SQL.

Я взял небольшой запрос с другого сайта и изменить его немного:

SELECT 
SUM(order_items.qty_ordered) AS ordered_qty, order_items.name AS order_items_name, order_items.product_id AS entity_id, 
e.entity_type_id, e.attribute_set_id, e.type_id, e.sku, e.has_options, e.required_options, e.created_at, 
e.updated_at FROM sales_flat_order_item AS order_items 
INNER JOIN sales_flat_order AS `order` ON `order`.entity_id = order_items.order_id AND `order`.state <> 'canceled' 
LEFT JOIN catalog_product_entity AS e 
ON 
-- (e.type_id NOT IN ('grouped', 'configurable', 'bundle')) 
-- AND 
e.entity_id = order_items.product_id AND e.entity_type_id = 4 
--AND state = "complete" 

WHERE (parent_item_id IS NULL) 

GROUP BY order_items.product_id 
HAVING (SUM(order_items.qty_ordered) > 0) 

ORDER BY ORDERED_QTY DESC 

Это более или менее, кажется, дает разумный выход - но цифры отличаются от экрана админ-старт (где отображаются только верхние 5).

Кто-нибудь сделал что-л. похожее на это уже?

ответ

1

есть решение (запрос) теперь

select 
     year_ordered, 
     product_type, 
     sku, 
     name, 
     sum(qty_ordered) as qty, 
     sum(row_total) as total 
from (

SELECT 
    YEAR(so.created_at) AS year_ordered, 
    -- order_id, 
    product_type, sku, name, qty_ordered, price, row_total 


    FROM `sales_flat_order` AS so 
    INNER JOIN `sales_flat_order_item` AS si ON si.order_id=so.entity_id 
     AND (so.state != "canceled") 
ORDER BY so.created_at desc 

) stat 

group by stat.year_ordered, stat.product_type, stat.sku, stat.name 
order by year_ordered desc, total desc 

I'm с использованием подзапроса, чтобы иметь возможность контролировать, что подсчет продуктов является правильным.

SELECT 
     YEAR(so.created_at) AS year_ordered, 
     -- order_id, 
     product_type, sku, name, qty_ordered, price, row_total 


    FROM `sales_flat_order` AS so 
    INNER JOIN `sales_flat_order_item` AS si ON si.order_id=so.entity_id 
     AND (so.state != "canceled") 
ORDER BY so.created_at desc 

Результат - это список заказанных изделий в год. Если вы хотите увидеть список бестселлеров на протяжении всех лет, достаточно небольшой модификации (здесь упорядочено по сумме).

select 
     product_type, 
     sku, 
     name, 
     sum(qty_ordered) as qty, 
     sum(row_total) as total 
from (

SELECT 
    YEAR(so.created_at) AS year_ordered, 
    -- order_id, 
    product_type, sku, name, qty_ordered, price, row_total 


    FROM `sales_flat_order` AS so 
    INNER JOIN `sales_flat_order_item` AS si ON si.order_id=so.entity_id 
     AND (so.state != "canceled") 
ORDER BY so.created_at desc 

) stat 

group by stat.product_type, stat.sku, stat.name 
order by total desc 
Смежные вопросы