Comunidad oficial de diseñadores web, web developers y Webmasters. Aqui podemos tratar temas actuales sobre diseño y tecnología. Podemos compartir y actualizarnos. Flash, PHP, ASP, Java, HTML, CSS, MySQL, CMS, etc. Unite YA y lee los Sticky

Ver más
  • 17,201 Miembros
  • 12,950 Temas
  • 4,967 Seguidores
  • 0

[Solucionado] Problema con consulta MYSQL

Hola, tengo un lío con una consulta MYSQL.

Necesito mostrar en una página una suma total de cuanto se genero en el mes y debajo de eso, mostrar un detalle de cuanto genero cada producto en ese mes.

Ejemplo:

Mayo 2012 - 120 ventas - $20.000,00
15 Notebook - $10.000,00
22 Parlantes - $2.000,00
10 Monitores - $8.000,00

Abril 2012 - 150 ventas - $35.000,00
15 Notebook - $10.000,00
22 Parlantes - $2.000,00
10 Monitores - $8.000,00

Este es el SQL que me mande pero creo que hice cualquiera :S

(SELECT SUM(monto) AS total_monto, SUM(ventas) AS total_ventas 
FROM $facturas 
WHERE id_usuario = $usuario 
GROUP BY fecha DESC) 
UNION ALL 
(SELECT * FROM $facturas 
LEFT JOIN $producto 
ON ($facturas.id_producto = $producto.id) 
WHERE $facturas.id_usuario = $usuario)


Solución:

Realizar las consultas por separado.

SELECT *, SUM($facturas.monto) AS total_monto, SUM($facturas.ventas) as total_ventas 
FROM $facturas
WHERE id_usuario = $usuario
AND moneda = $moneda
GROUP BY fecha
ORDER BY fecha DESC


SELECT *, $facturas.fecha AS fecha_factura, $facturas.ventas AS ventas_totales, $facturas.moneda AS moneda_factura
FROM $facturas  
LEFT JOIN $producto  
ON ($facturas.id_producto = $producto.id)  
WHERE $facturas.id_usuario = %d
  • 0
  • 0Calificación
  • 0Seguidores
  • 155Visitas
  • 0Favoritos

7 comentarios

@gastondla35 Hace más de 1 año
la próxima tratá de indentar el código ya que no se puede leer todo así de corrido.

  (SELECT SUM(monto) AS total_monto, SUM(ventas) AS total_ventas 
     FROM $facturas 
    WHERE id_usuario = $usuario 
 GROUP BY fecha DESC) 
UNION ALL (
   SELECT * 
     FROM $facturas 
LEFT JOIN $producto 
       ON ($facturas.id_producto = $producto.id) 
    WHERE $facturas.id_usuario = $usuario)


vez? así queda un poco más lindo, por lo menos para mi y lo puedo entender un poco mejor.
en la cláusula GROUP BY al agrupar por fecha solamente estás agrupando por día. si quieres agrupar por mes deberías hacer GROUP BY MONTH(fecha) y en la cláusula WHERE debes poner que año. ejemplo

  (SELECT SUM(monto) AS total_monto, SUM(ventas) AS total_ventas 
     FROM $facturas 
    WHERE id_usuario = $usuario 
      AND YEAR(fecha) = 2008
      AND MONTH(fecha) = 3
 GROUP BY MONTH(fecha) DESC) 
UNION ALL (
   SELECT * 
     FROM $facturas 
LEFT JOIN $producto 
       ON ($facturas.id_producto = $producto.id) 
    WHERE $facturas.id_usuario = $usuario)


en ese ejemplo obtenés la ventas del mes de marzo del año 2008.
creo que se podía filtrar de otra forma el mes y año pero no recuerdo a esta hora.

salu2
@gastondla35 Hace más de 1 año
si quieres las ventas de todo el año, vas a tener q agregar en el GROUP BY el año

GROUP BY YEAR(fecha), MONTH(fecha)


y del where sacar la condición del mes.

Ahora que reviso bien no entiendo por qué haces un UNION?
@matman83 Hace más de 1 año
para poder hacer un union el select de arriba y el de abajo tienen que tener la misma cantidad de campos, y tipos compatibles.
@matman83 Hace más de 1 año
sería más fácil hacer 2 consultas por separado en lugar de hacer el union.
Tambien podes hacer una sola consulta, la del detalle, y hacer la suma por codigo php, en lugar de mysql.
@gastondla35 Hace más de 1 año
si lo pudiste resolver pone al principio del título [solucionado], luego editá el post agregando la solución que aplicaste así aquel que viene con la misma duda puede resolverlo sin necesidad de leerse todos los comentarios

salu2
Tienes que ser miembro para responder en este tema