Можно ли получить количество товаров из каждой категории в заказе, используя woocommerce и mysql? - PullRequest
0 голосов
/ 25 января 2020

Newb ie здесь, как вы когда-то были. Я нашел следующий код для извлечения всех товаров из заказов, но я также хотел бы узнать, сколько товаров каждой родительской категории содержится в каждом заказе. У меня есть 5 родительских категорий со многими подкатегориями, но в этом случае интересна только родительская категория.

Вот код, который я нашел:

select
    p.ID as order_id,
    p.post_date,
    max( CASE WHEN pm.meta_key = '_billing_email' and p.ID = pm.post_id THEN pm.meta_value END ) as billing_email,
    max( CASE WHEN pm.meta_key = '_billing_first_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_first_name,
    max( CASE WHEN pm.meta_key = '_billing_last_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_last_name,
    ( select group_concat( order_item_name separator '|' ) from www_woocommerce_order_items where order_id = p.ID ) as order_items
from
    www_posts p 
join 
    www_postmeta pm on p.ID = pm.post_id
join 
    www_woocommerce_order_items oi on p.ID = oi.order_id
where
    post_type = 'shop_order'
group by
    p.ID

Вот пример :

Это столбцы в таблице order_items:

order_item_id, order_item_name, order_item_type, order_id 

А вот строки для одного заказа:

6, ProductName, line_item, 515
7, FreeShipping, shipping, 515
8, Tax-2, tax, 515

Здесь мы видим, что кто-то что-то купил с именем «ProductName» с «FreeShipping» и с «Tax-2». Это означает, что она купила только 1 товар. Я попытался добавить

where oi.order_item_type = 'line_item'

, а затем в select

Select COUNT(oi.order_id)

вот так:

select
    p.ID as order_id,
    p.post_date,
    max( CASE WHEN pm.meta_key = '_billing_email' and p.ID = pm.post_id THEN pm.meta_value END ) as billing_email,
    max( CASE WHEN pm.meta_key = '_billing_first_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_first_name,
    max( CASE WHEN pm.meta_key = '_billing_last_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_last_name,
    (select group_concat( order_item_name separator '|' ) from www_woocommerce_order_items where order_id = p.ID ) as order_items,
    COUNT(oi.order_id)
from
    www_posts p 
join 
    www_postmeta pm on p.ID = pm.post_id
join 
    www_woocommerce_order_items oi on p.ID = oi.order_id
where
    post_type = 'shop_order' and
    oi.order_item_type ='line_item'
group by
    p.ID

Но в этом примере COUNT(oi.order_id) привело к 52, когда я ожидается только 1. А также, так как я хочу иметь количество продуктов для каждой категории, я понимаю, что это слишком сложно для меня, чтобы понять.

Помощь будет оценена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...