Woocommerce sql 产品订单价格

时间:2021-04-02 09:55:47

标签: sql wordpress

select
 
max( CASE WHEN pm.meta_key = '_product_id' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as "Id",
p.order_item_name as "Product Name",
max( CASE WHEN wppm.meta_key = '_regular_price' and wpp.ID = wppm.post_id and wpp.ID = p.order_id THEN wppm.meta_value END ) as "Regular Prices",
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 = '_line_total' and p.order_item_id = pm.order_item_id THEN pm.meta_value END ) as "Gross",
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
from
wp_woocommerce_order_items as p,
wp_woocommerce_order_itemmeta as pm,
wp_posts as wpp,
wp_postmeta as wppm
 where order_item_type = 'line_item' and

 p.order_item_id = pm.order_item_id 
 and wpp.ID = wppm.post_id
AND wpp.ID = p.order_id

 
 group by
p.order_item_id

所有列结果都可以,但价格为空,我该如何解决? 如何计算数量的总和?

1 个答案:

答案 0 :(得分:1)

我无法解决您的具体问题,但查询的结构应为:

select max( CASE WHEN pm.meta_key = '_product_id' THEN pm.meta_value END ) as "Id",
       p.order_item_name as "Product Name",
       max( CASE WHEN wppm.meta_key = '_regular_price' and wpp.ID = wppm.post_id and wpp.ID = p.order_id THEN wppm.meta_value END ) as "Regular Prices",
       max( CASE WHEN pm.meta_key = '_qty' THEN pm.meta_value END ) as "qty",
       max( CASE WHEN pm.meta_key = '_line_total' THEN pm.meta_value END ) as "Gross",
       max( CASE WHEN pm.meta_key = '_line_subtotal_tax' THEN pm.meta_value END ) as subTotalTax,
       max( CASE WHEN pm.meta_key = '_line_tax' THEN pm.meta_value END ) as Tax,
       max( CASE WHEN pm.meta_key = '_tax_class' THEN pm.meta_value END ) as taxClass,
       max( CASE WHEN pm.meta_key = '_line_subtotal' THEN pm.meta_value END ) as subtotal
from wp_woocommerce_order_items p join
     wp_woocommerce_order_itemmeta pm
     on p.order_item_id = pm.order_item_id join
     wp_posts wpp
     on wpp.ID = p.order_id join
     wp_postmeta as wppm
     on wpp.ID = wppm.post_id
where order_item_type = 'line_item'
group by p.order_item_id;

注意事项:

  • 使用正确、明确、标准、可读的 JOIN 语法。
  • 从不FROM 子句中使用逗号。
  • and p.order_item_id = pm.order_item_id 表达式中不需要条件 case

我还怀疑您的查询正在生成笛卡尔积。同样,这不会影响您的结果,只会减慢查询速度。但是,您尚未提供示例数据和所需的结果,因此不能 100% 确定。

我认为这不会解决您的特定问题。但大概 '_regular_price' 不能用作 wppm 中的键值。