我正在使用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
答案 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