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

标签 mysql wordpress woocommerce

我正在为我的 Wordpress 数据库创建一些 SQL View ,以便更轻松地查看通过 WooCommerce 插件生成的在线订单。我熟悉 WooCommerce 的结构和数据的存储位置,但作为一名 SQL 新手,我遇到了最后一个障碍。

我已经能够使用此引用创建所有订单详细信息的第一个 View :

http://codecharismatic.com/sql-script-to-get-all-woocommerce-orders-including-metadata/

现在我需要为每个订单创建一个类似的行项目 View 。有 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 语法 - 我已尝试使用与上述链接类似的语法,但到目前为止还无法正常工作,也不确定这是否确实正确语法。

最佳答案

我通过反复试验设法解决了这个问题。这是最终有效的查询:

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

关于mysql - 用于检索 WooCommerce 订单项和元数据的 SQL 选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38743011/

相关文章:

MySQL - 选择日期时间列之前 1 小时的行

mysql - Mamp mysql-server 停止工作

javascript - 仅在具有特定类的链接上使用 Ajax

wordpress - 在 wordpress 中获取字符串的翻译

php - WooCommerce:在结帐页面中默认设置国家/地区

php - 需要帮助在 PHP 中从 SQL 连接多个表

PHP mySQL CURRENT_TIMESTAMP cPanel 数据库中显示的时间不正确

javascript - PCRE 正则表达式/WordPress/剥离标签

woocommerce - 从添加到购物车通知中删除继续购物按钮

mysql - SQL 多个更新查询一个接一个