WooCommerce - Запрос заказанных товаров
Я пытаюсь получить все заказы за определенный день/время, а затем заказанные товары, используя SQL (MySQL), как показано в запросе ниже:
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'
Похоже, что когда я пытаюсь сделать запрос к таблице wp_woocommerce_order_itemmeta
для получения данных о заказанных товарах, я теряю соединение с базой данных (время соединения истекает во время выполнения запроса).
Есть какие-нибудь идеи, что происходит?

Исправленный запрос
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'
Пояснение: ID записи не имеет прямой связи с метаданными элемента заказа

очень неэффективный SQL-запрос, вам следует использовать соединение с таблицей itemmeta вместо cross join. этот ответ следует удалить

Решил обновить этот материал, так как нашел его при создании собственной системы отчетов.
Более правильный метод — использовать соответствующие INNER JOIN для сокращения времени выполнения запросов:
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';
