WooCommerce - Query per i prodotti ordinati
Sto cercando di ottenere tutti gli ordini per un particolare giorno/ora e quindi i prodotti ordinati utilizzando SQL (MySQL) come mostrato nella query seguente:
select
p.ID as order_id,
p.post_date,
i.order_item_name,
max( CASE WHEN im.meta_key = '_product_id' and p.ID = im.order_item_id THEN im.meta_value END ) as Prod_ID
from
wp_posts as p,
wp_postmeta as pm,
wp_woocommerce_order_items as i,
wp_woocommerce_order_itemmeta as im
where
p.post_type = 'shop_order'
and p.ID = pm.post_id
and p.ID = i.order_id
and p.post_date BETWEEN '2016-01-14 00:00:00' AND '2016-01-14 23:59:59'
and p.post_status = 'wc-processing'
Sembra che quando provo a interrogare la tabella wp_woocommerce_order_itemmeta
per i dati dei prodotti ordinati, perdo la connessione al database (timeout della connessione durante la query).
Qualche idea su cosa stia succedendo?

Query corretta
select
p.ID as order_id,
p.post_date,
i.order_item_name,
max( CASE WHEN im.meta_key = '_product_id' and i.order_item_id = im.order_item_id THEN im.meta_value END ) as Prod_ID
from
wp_posts as p,
wp_postmeta as pm,
wp_woocommerce_order_items as i,
wp_woocommerce_order_itemmeta as im
where
p.post_type = 'shop_order'
and p.ID = pm.post_id
and p.ID = i.order_id
and p.post_date BETWEEN '2016-01-14 00:00:00' AND '2016-01-14 23:59:59'
and p.post_status = 'wc-processing'
Spiegazione: L'ID del post non ha una relazione diretta con i metadati degli elementi dell'ordine

SQL molto inefficiente, dovresti unire la tabella itemmeta invece del cross join. Dovresti eliminare questa risposta

Volevo aggiornare questo, poiché l'ho trovato mentre sviluppavo il mio sistema di reporting.
Un metodo migliore è utilizzare i giusti inner join, riducendo i tempi di query:
select
p.ID as order_id,
p.post_date,
i.order_item_name,
max( CASE WHEN im.meta_key = '_product_id' and i.order_item_id = im.order_item_id THEN im.meta_value END ) as Prod_ID
from
wp_posts as p
inner join
wp_postmeta as pm
on p.id = pm.post_id
inner join
wp_woocommerce_order_items as i
on p.id = i.order_id
inner join
wp_woocommerce_order_itemmeta as im
on i.order_item_id = im.order_item_id
where
p.post_type = 'shop_order'
and p.post_date BETWEEN '2017-04-29 00:00:00' AND '2017-04-30 23:59:59'
and p.post_status = 'wc-processing';
