Foros del Web » Programando para Internet » PHP »

Problema con consulta avanzada

Estas en el tema de Problema con consulta avanzada en el foro de PHP en Foros del Web. Hola que tal, tengo el siguiente problema. Tengo 2 tablas, VENTAS y COMPRAS VENTAS Id | Productos | cantidad | precio | fecha 1 | ...
  #1 (permalink)  
Antiguo 21/06/2013, 16:08
 
Fecha de Ingreso: abril-2012
Mensajes: 9
Antigüedad: 12 años
Puntos: 0
Problema con consulta avanzada

Hola que tal, tengo el siguiente problema. Tengo 2 tablas, VENTAS y COMPRAS

VENTAS
Id | Productos | cantidad | precio | fecha
1 | Prod01 | 5 | 20.00 | 10/06/2013
2 | Prod01 | 15 | 19.00 | 09/06/2013
3 | Prod02 | 10 | 5.00 | 09/06/2013
4 | Prod03 | 3 | 10.00 | 08/06/2013

COMPRAS
Id | Productos | cantidad | precio | fecha
1 | Prod01 | 5 | 20.00 | 10/06/2013
2 | Prod01 | 20 | 19.00 | 09/06/2013
3 | Prod02 | 15 | 5.00 | 09/05/2013
4 | Prod03 | 5 | 10.00 | 08/05/2013

Necesito sacar las ventas del mes agrupado por producto y totalizando cantidad y precio, el cual no es ningun problema, pero tambien en ese reporte necesito saber en cuanto se compro el producto de esa venta, compra que pudo haber sido el mes anterior y no necesariamente se vendio todo lo que se compro ademas de que se pudo a haber comprado a diferentes precios.

Espero haberme explicado.

Gracias
  #2 (permalink)  
Antiguo 21/06/2013, 16:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con consulta avanzada

Minería de datos...
No hay una consulta única, ni con JOINs en todas sus variedades (INNER / LEFT / RIGHT) que te pueda responder eso. Se debe hacer de un modo combinado, pero de tal modo que los subconjuntos de datos se resuelvan de forma separada, a fin de no generar productos cartesianos que ensucien la información, además de hacer agrupamientos WITH ROLLUP.
También debes considerar que habrá que incluir otras tablas más en el cálculo, empezando con la tabla "Productos", puesto que no se puede relacionar en forma directa la Venta con la Compra, ya que no son acciones funcionalmente dependientes. Son acciones relacionadas a través del stock y el histórico de compras y ventas, pero no se relacionan directamente.
En esencia, es lo mismo que habrás estudiado en algún momento como Contabilidad y Balances... si es que viste algo de eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 21/06/2013, 21:01
 
Fecha de Ingreso: abril-2012
Mensajes: 9
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con consulta avanzada

Gracias Gnzsoloyo, precisamente esa era en parte mi duda, si forzozamente tenia que resolverlo de forma separada.

La forma en que lo pienso hacer es obtener primero las ventas del mes, con eso tengo el dato de cantidad de producto vendido y revisar en el stock e historico de compra la relacion de precios. La tabla de "Productos" que mencionas, segun entiendo de momento no la necesito a menos que sea para obtener el nombre del producto ya que en ventas y compras puedo relacionarlas con IDPRODUCTO, ¿estoy en lo correcto?

Gracias de nuevo y saludos.
  #4 (permalink)  
Antiguo 21/06/2013, 21:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con consulta avanzada

Cita:
La tabla de "Productos" que mencionas, segun entiendo de momento no la necesito a menos que sea para obtener el nombre del producto ya que en ventas y compras puedo relacionarlas con IDPRODUCTO, ¿estoy en lo correcto?
No. No es correcto.
Como puede suceder que no tengas la misma cantidad de productos con movimientos de compras que de ventas en un mes dado, se debe usar la tabla Productos para obtener cada subconjunto, tal que permita recuperar aquellos que sin tener ventas tengan compras o viceversa.
¿Se enteinde?
La base de datos no puede crear datos que no existen.
Si el producto A no tuvo movimientos de Compra en el mes N, pero si tuvo ventas, no podrás cruzar ambos resultados ya que el producto N no existirá en la tabla de Compras, por lo que el resultado será NULL (no devolverá el registro). Y no se puede adivinar cuál es el que si tendrá el producto y cuál no ¿qué pasaría si otro producto tiene ventas, pero no compras?)
En cambio, si cruzas con Productos haciendo un LEFT JOIN, obtendrás primero un subconjunto con Compras en cero (0), y luego el movimiento de Ventas de ese producto, que será mayor a cero.
Al consolidar ambos subconjuntos, cruzando los ID de los productos, tendrás los valores correctos para cada mes... uno en cero y el otro no.

Las tablas base son siempre necesarias cuando haces reportes de este tipo.
Siempre.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 21/06/2013, 21:41
 
Fecha de Ingreso: abril-2012
Mensajes: 9
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con consulta avanzada

Si esa parte si la entiendo, pero aún cuando no haya compras en determindo mes, como determino ¿cuanto me costo el producto que vendi? segun yo ya teniendo el dato de la cantidad vendida, supongamos 100, puedo buscar en compras ordenando por fecha descendente las ultimas 100 compras y determinar cuanto me costaron.

Como vez? estoy muy perdido todavia jaajajajajaja la verdad soy nuevo en mysql, estaba acostumbrado a hacer consultas con tablas tipo dbase y hacer recorridos de tablas por separado.
  #6 (permalink)  
Antiguo 22/06/2013, 12:45
 
Fecha de Ingreso: abril-2012
Mensajes: 9
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con consulta avanzada

Ya analice bien el problema, y veo que lo que tengo que hacer es involucrar mas tablas como ENTRADAS y SALIDAS como ya habias comentado. Para poder tomar en cuenta todos los casos.

Gracias. Me sirvieron los comentarios que hiciste.

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:31.