WooCommerce - Consulta para productos ordenados

15 ene 2016, 23:19:35
Vistas: 20.6K
Votos: 2

Estoy tratando de obtener todos los pedidos de un día/hora específico y luego ordenar los productos usando SQL (MySQL) como se muestra en la consulta siguiente:

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'

Parece que cuando intento consultar la tabla wp_woocommerce_order_itemmeta para obtener los datos de los productos ordenados, pierdo la conexión a la base de datos (la conexión se agota durante la consulta).

¿Alguna idea de qué está pasando?

3
Comentarios

Esto está un poco fuera de tema ya que trata sobre MySQL y WooCommerce pero no específicamente sobre WordPress. Tal vez estés alcanzando un límite y las tablas son demasiado grandes o algo así - definitivamente no soy un experto en MySQL pero quizás podrías probar con LIMIT en tus resultados a 1 o 2 y ver si se devuelve algo. Otra idea es usar COUNT() para ver el número de filas que espera devolver.

Howdy_McGee Howdy_McGee
15 ene 2016 23:23:29

Solo hay 46 pedidos para ese día, así que no debería ser un problema. De cualquier forma, intentaré consultar a los desarrolladores de WooCommerce en el foro de WP.

JackTheKnife JackTheKnife
15 ene 2016 23:25:54

Aunque solo veas 46 pedidos en el backend - podría ser una consulta mal formada que está devolviendo más resultados de los esperados, lo que podría ser el núcleo del problema - solo son sugerencias para descartar las pequeñas cosas. ¡Buena suerte!

Howdy_McGee Howdy_McGee
15 ene 2016 23:41:56
Todas las respuestas a la pregunta 2
2

Consulta corregida

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'

Explicación: El ID de la publicación no tiene relación directa con los metadatos del artículo del pedido

19 ene 2016 19:16:15
Comentarios

consulta SQL muy ineficiente, deberías unir la tabla itemmeta en lugar del cross join. deberías eliminar esta respuesta

xnagyg xnagyg
8 feb 2019 23:03:48

In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'p.ID'; this is incompatible with sql_mode=only_full_group_by

Olaf Erlandsen Olaf Erlandsen
11 may 2019 08:04:03
0

Quería actualizar esto, ya que lo encontré mientras construía mi propio informe.

Un método mejor es hacer las uniones internas adecuadas, minimizando los tiempos de consulta:

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';
2 may 2017 05:03:12