用于检索WooCommerce订单项和元数据的SQL选择查询

时间:2016-08-03 11:59:00

标签: mysql wordpress woocommerce

我正在为我的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语法 - 我尝试使用与上面链接类似的语法但是到目前为止还没能使它工作并且不确定这是否确实是正确的语法。

2 个答案:

答案 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,