SQL для извлечения артикулов из элементов заказа (Woocommerce — WordPress)

#mysql #sql #wordpress #woocommerce

Вопрос:

 select
'EU' as country,
pmo.post_date,
pmo.ID,
p.order_id,
p.order_item_id,
p.order_item_name,
p.order_item_type,

max( CASE WHEN pm.meta_key = '_product_id' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as productID,
max( CASE WHEN pm.meta_key = '_qty' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as Qty,
max( CASE WHEN pm.meta_key = '_variation_id' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as variationID,
max( CASE WHEN pm.meta_key = '_line_total' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as lineTotal,
max( CASE WHEN pm.meta_key = '_line_subtotal_tax' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as subTotalTax,
max( CASE WHEN pm.meta_key = '_line_tax' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as Tax,
max( CASE WHEN pm.meta_key = '_tax_class' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as taxClass,
max( CASE WHEN pm.meta_key = '_line_subtotal' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as subtotal,
max( CASE WHEN pm.meta_key = 'jackpot_product' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as jprod

from

wpx7_woocommerce_order_items as p,
wpx7_woocommerce_order_itemmeta as pm,
wpx7_posts as pmo
 where order_item_type = 'line_item' and
 p.order_item_id = pm.order_item_id and
  p.order_id = pmo.id and  pmo.post_date > SUBDATE(CURRENT_DATE, 10)
 group by
p.order_item_id
 

Я не могу понять, как я могу успешно получить метаданные SKU из postmeta… Пожалуйста, помогите
Если я попытаюсь присоединиться к таблице postmeta, я получу сообщение об ошибке, запрос завершится неудачно, и сайт упадет… Поэтому я должен остановить ошибочный запрос…

Комментарии:

1. JOIN . JOIN . JOIN .

Ответ №1:

Этот запрос сработал для меня:

 SELECT p.ID, p.post_title, 
MAX(CASE WHEN pm1.meta_key = '_price' then pm1.meta_value ELSE NULL END) as price,
MAX(CASE WHEN pm1.meta_key = '_regular_price' then pm1.meta_value ELSE NULL END) as regular_price,
MAX(CASE WHEN pm1.meta_key = '_sale_price' then pm1.meta_value ELSE NULL END) as sale_price,
MAX(CASE WHEN pm1.meta_key = '_sku' then pm1.meta_value ELSE NULL END) as sku
FROM wp_posts p LEFT JOIN wp_postmeta pm1 ON ( pm1.post_id = p.ID)                 
WHERE p.post_type in('product', 'product_variation') AND p.post_status = 'publish'
GROUP BY p.ID, p.post_title