Estoy construyendo un gráfico de líneas para un informe de ventas del producto usando la API Google Chart y estoy separando los datos por día básicamente ejecutando la misma consulta en un ciclo para cada día usando UNION ALL como pegamento.Optimizar la consulta de MySQL para obtener datos usando el rango de tiempo
E.g. Un informe para todo un año repetirá la consulta, utilizando UNION ALL 365 veces.
Supongo que este no es el mejor ejemplo de práctica así que si alguien fuera tan amable y me señalara en la dirección correcta de cómo optimizar esta consulta, lo agradecería enormemente.
SELECT SUM(op.qty) AS qty
FROM uc_order_products op
LEFT JOIN uc_orders o ON o.order_id = op.order_id
LEFT JOIN node n ON n.nid = op.nid
LEFT JOIN node_type nt ON nt.type = n.type
WHERE (o.created > 1247695200) AND (o.created < 1247781600)
AND (o.order_status = 'completed')
AND (nt.type = 'book' OR nt.type = 'digital_movie')
UNION ALL
SELECT SUM(op.qty) AS qty
FROM uc_order_products op
LEFT JOIN uc_orders o ON o.order_id = op.order_id
LEFT JOIN node n ON n.nid = op.nid
LEFT JOIN node_type nt ON nt.type = n.type
WHERE (o.created > 1247781600) AND (o.created < 1247868000)
AND (o.order_status = 'completed')
AND (nt.type = 'book' OR nt.type = 'digital_movie')
UNION ALL
SELECT SUM(.......
Gracias por todas las respuestas rápidas! Con el ejemplo de consulta de jspcal, mi consulta terminó así:
SELECT SUM(op.qty) AS qty, DATE_FORMAT(FROM_UNIXTIME(o.created),'%d-%m-%Y') AS day
FROM uc_order_products op
LEFT JOIN uc_orders o ON o.order_id = op.order_id
LEFT JOIN node n ON n.nid = op.nid
LEFT JOIN node_type nt ON nt.type = n.type
WHERE (o.created > 1247695200) AND (o.created < 1263596400)
AND (o.order_status = 'completed')
AND (nt.type = 'book' OR nt.type = 'digital_movie')
GROUP BY day
Y con PHP, que combinan un (claves de matriz a juego con strtotime($data->day)
del resultado de la consulta) completa gama intervalo de fechas para obtener días sin venta.
Quizás me falta m aquí, pero ¿por qué no simplemente ejecutaste una consulta donde se creaba> el comienzo de tu rango de tiempo y