【问题标题】:MySQL Getting SKU from WooCommerce OrdersMySQL 从 WooCommerce 订单中获取 SKU
【发布时间】:2018-08-30 10:33:20
【问题描述】:

我正在使用 SQL Query 来获取产品的 _sku。 这是我的查询。但我得到 NULL 作为回应。 谁能指出我错过了什么? 基本上使用这种方式,我可以获得任何带有订单详细信息的产品元数据。

select 
p.ID as order_id, 
p.post_date, 
max( CASE WHEN pm.meta_key = '_billing_email' and p.ID = pm.post_id THEN pm.meta_value END ) as billing_email,
max( CASE WHEN oim.meta_key = '_product_id' and oim.order_item_id = oi.order_item_id  THEN oim.meta_value END ) as product_id,
max( CASE WHEN pm.meta_key = '_sku' and p.ID = oim.meta_value THEN pm.meta_value END ) as sku,
( select group_concat( order_item_name separator '|' ) from wp_woocommerce_order_items where order_id = p.ID ) as order_items
from 
wp_posts p
join wp_postmeta pm on p.ID = pm.post_id
join wp_woocommerce_order_items oi on p.ID = oi.order_id
join wp_woocommerce_order_itemmeta oim on oim.order_item_id = oi.order_item_id
group by 
p.ID

【问题讨论】:

  • 分享你的 3tables 数据和你想要的输出
  • 行max( CASE WHEN pm.meta_key = '_sku' 不能工作,因为pm 是wp_postmeta 表shop_order 帖子类型而不是product 帖子类型...您需要包含一个子查询product 在产品 sku 的where 部分中在中输入帖子。
  • 我已经删除了 where,sku 仍然是 NULL

标签: mysql sql wordpress join woocommerce


【解决方案1】:

我已经解决了查询并找到了答案,我为未连接到订单 ID 的帖子元的帖子元添加了另一个连接,因此我需要单独的连接来获取产品元数据。所以这就是我所做的。 使用这种方式,您可以获得所购买产品的所有元数据。

select 
p.ID as order_id, 
p.post_date, 
max( CASE WHEN pm.meta_key = '_billing_email' and p.ID = pm.post_id THEN pm.meta_value END ) as billing_email,
max( CASE WHEN oim.meta_key = '_product_id' and oim.order_item_id = oi.order_item_id  THEN oim.meta_value END ) as product_id,
max( CASE WHEN opm.meta_key = '_sku' and oim.meta_value = opm.post_id THEN opm.meta_value END ) as sku,
( select group_concat( order_item_name separator '|' ) from wp_woocommerce_order_items where order_id = p.ID ) as order_items

from 
wp_posts p
join wp_postmeta pm on p.ID = pm.post_id
join wp_woocommerce_order_items oi on p.ID = oi.order_id
join wp_woocommerce_order_itemmeta oim on oim.order_item_id = oi.order_item_id
join wp_postmeta opm on opm.post_id = oim.meta_value
group by 
p.ID

【讨论】:

    【解决方案2】:

    这对我来说太复杂了。我不确定你要做什么。

    如果数据库不是非常庞大(超过 10 万个帖子),您可能会为此编写一个简短的脚本。

    $file = fopen("skus.csv","w");
    
    $orders = wc_get_orders();
    
    foreach ( $orders as $order ) {
      $items = $order->get_items();
    
      foreach ( $items as $single_item ) 
        fputcsv($file, get_post_meta( $single_item->ID, '_sku', TRUE) );
    
    }
    

    或者,如果您必须留在数据库中,请将您的命令分成三个部分。

    让第一部分将结果插入新表中的新表中。

    然后从他们那里做其他部分。

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 1970-01-01
      • 2021-08-13
      • 2018-11-19
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      相关资源
      最近更新 更多