This post is just a place to store handy SQL queries for Woocommerce.
Get Order and all its information
select
p.ID as order_id,
p.post_date,
pm.*
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
where
post_type = 'shop_order' and
p.ID = 14223
Generate an Orders report and specific information about the orders (eg things like order date, shipping address etc)
select
p.ID as order_id,
p.post_date,
pm.*
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
where
post_type = 'shop_order'
and p.id > 50457
and pm.meta_key in (
'_kookeli_tracking_number','_billing_email','_billing_first_name','_billing_last_name','_billing_city','_billing_country','_billing_phone','_order_total','_shipping_address_index','_payment_method_title',
'_completed_date')
group by p.id, pm.meta_key
Get Users and billing and shipping addresses in Woocommerce
SELECT u.id, u.user_login, u.user_email,
max( CASE WHEN m.meta_key = 'billing_email' and u.ID = m.user_id THEN m.meta_value END ) as billing_email,
max( CASE WHEN m.meta_key = 'billing_first_name' and u.id = m.user_id THEN m.meta_value END ) as billing_first_name,
max( CASE WHEN m.meta_key = 'billing_last_name' and u.id = m.user_id THEN m.meta_value END ) as billing_last_name,
max( CASE WHEN m.meta_key = 'billing_address_1' and u.id = m.user_id THEN m.meta_value END ) as billing_address_1,
max( CASE WHEN m.meta_key = 'billing_address_2' and u.id = m.user_id THEN m.meta_value END ) as billing_address_2,
max( CASE WHEN m.meta_key = 'billing_city' and u.id = m.user_id THEN m.meta_value END ) as billing_city,
max( CASE WHEN m.meta_key = 'billing_state' and u.id = m.user_id THEN m.meta_value END ) as billing_state,
max( CASE WHEN m.meta_key = 'billing_postcode' and u.id = m.user_id THEN m.meta_value END ) as billing_postcode,
max( CASE WHEN m.meta_key = 'shipping_first_name' and u.id = m.user_id THEN m.meta_value END ) as shipping_first_name,
max( CASE WHEN m.meta_key = 'shipping_last_name' and u.id = m.user_id THEN m.meta_value END ) as shipping_last_name,
max( CASE WHEN m.meta_key = 'shipping_address_1' and u.id = m.user_id THEN m.meta_value END ) as shipping_address_1,
max( CASE WHEN m.meta_key = 'shipping_address_2' and u.id = m.user_id THEN m.meta_value END ) as shipping_address_2,
max( CASE WHEN m.meta_key = 'shipping_city' and u.id = m.user_id THEN m.meta_value END ) as shipping_city,
max( CASE WHEN m.meta_key = 'shipping_state' and u.id = m.user_id THEN m.meta_value END ) as _shipping_state,
max( CASE WHEN m.meta_key = 'shipping_postcode' and u.id = m.user_id THEN m.meta_value END ) as _shipping_postcode
FROM wp_users u
LEFT JOIN wp_usermeta m
ON u.ID = m.user_id
group by u.ID
this bit of sql is based on this post at http://codecharismatic.com/
Get Order Objects (not strictly sql, but seems a good place to drop it)
global $woocommerce;
$args = array( 'post_type'=> 'shop_order',
'post_status' => 'publish',
'posts_per_page' => -1,
'tax_query' => array(
array( 'taxonomy' => 'shop_order_status',
'field' => 'slug',
'terms' => array('processing')
)
)
);
$orders = array();
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
$order_id = $loop->post->ID;
$order = new WC_Order($order_id);
echo "id order = ".$order_id;
$orders[] = $order;
endwhile;
return $orders;
Hey,
Thanks for the info. After using the 1st query to get an order and all of its information, how would you be able to export it into a sql file to import it to a new database? When I try to export it, sql is not an option. I’m assuming it’s because the query comes back with “current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.”
Thanks,
Dana
hi Dana,
not sure I understand properly, you should be able to export the results from most mysql guis ( you can from phpmyadmin).
Very cool, just what I needed and double chuffed that you’ve helped save some of my Saturday
super, we all need abit more of our Saturdays !
Hi,
Are you able to direct me to the table/field I can find the delivery notes left by the customer at the checkout to add to the shipping information export?
Ive been through the wpjs_comments, wpjs_postmeta etc and just can’t work out where it is going?