MySQL从WooCommerce订单获取SKU

时间:2018-08-30 10:33:20

标签: mysql sql wordpress join woocommerce

我正在使用SQL查询来获取产品的_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

2 个答案:

答案 0 :(得分:0)

对我来说,这看起来太复杂了。我不确定您要做什么。

如果数据库不是完全庞大(超过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) );

}

或者,如果您必须留在数据库内部,则将命令分为三部分。

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

然后从他们的其他部分做起。

答案 1 :(得分:0)

我已经处理了该查询并找到了答案,我为post meta添加了另一个联接,该联接未连接到订单ID的post meta,因此我需要单独的联接来获取产品meta。所以这就是我所做的。  通过这种方式,您可以获得所购买产品的所有元数据。

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