我正在为我的Wordpress数据库创建一些SQL视图,以便更轻松地查看通过WooCommerce插件生成的在线订单。我熟悉WooCommerce结构以及存储数据的位置,但作为SQL新手,我在最后一道障碍时遇到困难。
我已经能够使用此参考创建所有订单详细信息的第一个视图:
http://codecharismatic.com/sql-script-to-get-all-woocommerce-orders-including-metadata/
现在我需要为每个订单创建一个类似的订单项视图。有2个表存储订单商品详情:
wp_woocommerce_order_items wp_woocommerce_order_itemmeta
我已经能够从wp_woocommerce_order_items表创建基本记录列表,如下所示:
SELECT order_item_id,order_item_name,order_item_type,order_id
FROM ocm_woocommerce_order_items
ORDER BY order_id
这会返回一个很好的记录列表,如下所示:
order_item_id order_item_name order_item_type order_id
2 Widgets line_item 9
3 Widgets line_item 10
4 Widgets line_item 11
5 Woo Logo line_item 473
6 Woo Logo line_item 473
我现在想为wp_woocommerce_order_itemmeta表中的每个订单项添加其他列。此表包含每个订单项的多个记录,如下所示:
meta_id order_item_id meta_key meta_value
136 16 _qty 4
137 16 _tax_class
138 16 _product_id 87
139 16 _variation_id 0
140 16 _line_subtotal 36
141 16 _line_total 36
142 16 _line_subtotal_tax 3.6
143 16 _line_tax 3.6
我想将其中的每一个转换为新列,因此我的输出将包含:
order_item_id, order_item_name, order_item_type, order_id, qty, tax_class, product_id, variation_id, line_subtotal, line_total, line_subtotal_tax, line_tax
我不确定在这里使用哪种SQL语法 - 我尝试使用与上面链接类似的语法但是到目前为止还没能使它工作并且不确定这是否确实是正确的语法。
答案 0 :(得分:7)
我设法通过反复试验来解决这个问题。这是最终有效的查询:
select
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
from
ocm_woocommerce_order_items as p,
ocm_woocommerce_order_itemmeta as pm
where order_item_type = 'line_item' and
p.order_item_id = pm.order_item_id
group by
p.order_item_id
答案 1 :(得分:0)
@mostafa Norzade我没有评论previlige,因此发布为答案
user_id的meta_key是'_customer_user',因此只需添加以下内容: 最大(作为pm.meta_key ='_customer_user'和p.ID = pm.post_id THEN pm.meta_value END的情况)作为customer_user,