Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con diferencia de fechas MySQL y

Estas en el tema de Problema con diferencia de fechas MySQL y en el foro de Mysql en Foros del Web. Hola gente, tengo un problema y no se muy bien como abordarlo. Vereis tengo las siguiente tablas: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original * CLIENTES ...
  #1 (permalink)  
Antiguo 29/07/2014, 02:56
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Problema con diferencia de fechas MySQL y

Hola gente, tengo un problema y no se muy bien como abordarlo. Vereis tengo las siguiente tablas:
Código MySQL:
Ver original
  1. *CLIENTES
  2. +----+--------+------+
  3. | id | nombre | Edad |
  4. +----+--------+------+
  5. |  1 | Marta  |   33 |
  6. |  2 | Pedro  |   22 |
  7. |  3 | Javi   |   39 |
  8. |  4 | Jose   |   41 |
  9. +----+--------+------+
  10.  
  11.  
  12. *PRODUCTOS
  13. +----+--------+------+
  14. | id | nombre | Edad |
  15. +----+--------+------+
  16. |  1 | Marta  |   33 |
  17. |  2 | Pedro  |   22 |
  18. |  3 | Javi   |   39 |
  19. |  4 | Jose   |   41 |
  20. +----+--------+------+
  21.  
  22.  
  23. *COMPRA
  24. +----------+-----------+---------------------+
  25. | idCompra | idCliente | Fecha               |
  26. +----------+-----------+---------------------+
  27. |        1 |         1 | 2014-07-01 10:40:58 |
  28. |        2 |         2 | 2014-07-03 10:41:02 |
  29. |        3 |         1 | 2014-07-13 10:41:16 |
  30. |        4 |         2 | 2014-07-27 10:41:19 |
  31. |        5 |         3 | 2014-07-16 10:41:32 |
  32. +----------+-----------+---------------------+
  33.  
  34.  
  35. *DETALLESCOMPRA
  36. +-----------+----------+------------+--------+
  37. | idDetalle | idCompra | idProducto | precio |
  38. +-----------+----------+------------+--------+
  39. |         1 |        1 |          1 |     18 |
  40. |         1 |        1 |          3 |     15 |
  41. |         1 |        1 |          6 |     11 |
  42. |         2 |        2 |          4 |     40 |
  43. |         3 |        3 |          3 |   14.4 |
  44. |         3 |        3 |          4 |   12.2 |
  45. |         4 |        4 |          5 |    100 |
  46. +-----------+----------+------------+--------+

Y lo que quiero es obtener los datos de la ULTIMA COMPRA realizada por un cliente junto con los detallesCompra de la compra. Es decir, un cliente ha hecho varias compras como es el cliente "1", pues me gustaria tener el SELECT de la compra a fecha de 2014-07-13 17:00:00, pues es la más cercana a la fecha actual (NOW()). Es algo tal que asi, supongo...

Código MySQL:
Ver original
  1. SELECT p.nombre as NombreProducto, d.precioDetalle as Precio
  2. FROM productos p, clientes c, detallesCompra d, compra co
  3. WHERE c.idCliente = 1
  4. AND c.idCliente = co.idCli...etc

Pero no se añadir la clausula de la fecha. He probado con esto:
Código MySQL:
Ver original
  1. SELECT co.idCompra, co.fecha
  2. FROM compra co, clientes ci
  3. WHERE  ci.id=1  
  4. ORDER BY  ABS(DATEDIFF(NOW(), co.fecha)) LIMIT 1
...pero esto hace que cuando en una compra hayan varias lineas de detallesCompra, solo se muestre una.

Alguna solucion?!?

Última edición por gnzsoloyo; 29/07/2014 a las 06:01 Razón: Mal etiquetado.
  #2 (permalink)  
Antiguo 29/07/2014, 07:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Problema con diferencia de fechas MySQL y

Código MySQL:
Ver original
  1. SELECT MAX(fecha) FROM compra

esto te la la fecha maxima.

Código MySQL:
Ver original
  1. SELECT * FROM compra INNER JOIN detallescompra
  2. WHERE fecha=(SELECT MAX(fecha) FROM compra)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 29/07/2014, 08:36
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema con diferencia de fechas MySQL y

Cita:
Iniciado por quimfv Ver Mensaje
Código MySQL:
Ver original
  1. SELECT MAX(fecha) FROM compra

esto te la la fecha maxima.

Código MySQL:
Ver original
  1. SELECT * FROM compra INNER JOIN detallescompra
  2. WHERE fecha=(SELECT MAX(fecha) FROM compra)
Gracias por contestar, pero no consigo el resultado esperado:
Código MySQL:
Ver original
  1. SELECT productos.nombre as Nombre_Producto
  2. FROM  compra, productos
  3. INNER JOIN detallescompra
  4. WHERE compra.fecha = ( SELECT MAX( fecha )  FROM compra WHERE compra.idCliente =1)
Esto muestra 54 registros, todos ellos son el nombre de los productos, en vez de mostrar los productos 3 y 4
  #4 (permalink)  
Antiguo 29/07/2014, 08:47
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 diferencia de fechas MySQL y

Necesitas estudiar un poco más de JOIN y SQL en general.
En la query estás pidiendo sólo el nombre del producto, por lo que en realidad sólo devolverá eso.
Por otro lado, estás haciendo un aparente producto cartesiano entre compa y productos, y no estás filtrando por cliente, ni por producto. Obviamente en ese caso no hay modo que devuelva solamente eso.
No hagas un copy + paste de las cosas. Trata de razonar la query que escribe, no es mágica. Sólo devuelve lo que tu mismo le pides.

Consejos:
1) No mezcles JOIN implicito con excplícito. Es una muy mala práctica, con resultados impredecibles.
2) No uses INNER JOIN sin las condiciones en el ON.
3) Si en todas las tablas el campo ID se llama "ID", el join implicito está juntando caballos con manzanas. Debes si o si establecer la relación en el ON o en el WHERE. ASí como está, devuelve cualquier cosa.

Por lo demás, la tabla "productos" que nos pones no contiene productos, y no se ven los nomrbes de campos.
__________________
¿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 29/07/2014, 10:16
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema con diferencia de fechas MySQL y

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Necesitas estudiar un poco más de JOIN y SQL en general.
En la query estás pidiendo sólo el nombre del producto, por lo que en realidad sólo devolverá eso.
Por otro lado, estás haciendo un aparente producto cartesiano entre compa y productos, y no estás filtrando por cliente, ni por producto. Obviamente en ese caso no hay modo que devuelva solamente eso.
No hagas un copy + paste de las cosas. Trata de razonar la query que escribe, no es mágica. Sólo devuelve lo que tu mismo le pides.

Consejos:
1) No mezcles JOIN implicito con excplícito. Es una muy mala práctica, con resultados impredecibles.
2) No uses INNER JOIN sin las condiciones en el ON.
3) Si en todas las tablas el campo ID se llama "ID", el join implicito está juntando caballos con manzanas. Debes si o si establecer la relación en el ON o en el WHERE. ASí como está, devuelve cualquier cosa.

Por lo demás, la tabla "productos" que nos pones no contiene productos, y no se ven los nomrbes de campos.
Pues la verdad que si. Estoy un poco verde en este tema.
Mejor hago 2 consultas sql y almaceno el resultado de una en una variable (PHP) para luego utilizarla en otra consulta.

Crei que podia conseguirlo directamente en MySQL. Muchas gracias a todos por las respuestas!!
  #6 (permalink)  
Antiguo 29/07/2014, 10:20
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 diferencia de fechas MySQL y

Creo que no entendiste...
La consulta se puede hacer, pero tienes que escribirla bien, y estás cometiendo errores fundamentales que necesitas aprender a resolver EN SQL...

Que evadas el tema ahora "parchando" la cosa en PHP no hará que no cometas los mismos errores más adelante, en otras consultas.

Mejor aprende ahora...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 29/07/2014, 10:37
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema con diferencia de fechas MySQL y

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Creo que no entendiste...
La consulta se puede hacer, pero tienes que escribirla bien, y estás cometiendo errores fundamentales que necesitas aprender a resolver EN SQL...

Que evadas el tema ahora "parchando" la cosa en PHP no hará que no cometas los mismos errores más adelante, en otras consultas.

Mejor aprende ahora...
Razon llevas, pero por motivos de tiempo no puedo, de momento, hacer otra cosa
Gracias por la ayuda !!!
  #8 (permalink)  
Antiguo 29/07/2014, 10:45
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 diferencia de fechas MySQL y

El tiempo te lo tienes que hacer.
Proceder a un desarrollo sobre consultas o diseños de datos incorrectos o defectuosos es tener que luego perder muchísimo más tiempo solucionando los errores, defectos y falta de performance masivos, producto del apuro y la improvisación.

¿En serio es tan difícil pensar en hacer algo como esto?:
Código MySQL:
Ver original
  1.     p.nombre NombreProducto,
  2.     d.precioDetalle Precio
  3. FROM productos p
  4.     INNER JOIN detallesCompra d ON p.idProducto = d.idProducto
  5.     INNER JOIN compra co ON d.idCompra = c.idCompra
  6.     INNER JOIN clientes c ON d.idCliente = c.idCliente
  7. WHERE c.idCliente = 1
  8.     AND c.fechaCompra = (SELECT MAX(fechaCompra) FROM compras WHERE idCliente = 1)
Nota: Estoy basandome pura y exclusivamente en lo que tu mismo posteaste más lo que ya te dijeron. No estoy inventando nada... Si hay errores es porque no conozco tus tablas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 29/07/2014, 11:28
 
Fecha de Ingreso: enero-2012
Mensajes: 32
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Problema con diferencia de fechas MySQL y

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El tiempo te lo tienes que hacer.
Proceder a un desarrollo sobre consultas o diseños de datos incorrectos o defectuosos es tener que luego perder muchísimo más tiempo solucionando los errores, defectos y falta de performance masivos, producto del apuro y la improvisación.

¿En serio es tan difícil pensar en hacer algo como esto?:
Código MySQL:
Ver original
  1.     p.nombre NombreProducto,
  2.     d.precioDetalle Precio
  3. FROM productos p
  4.     INNER JOIN detallesCompra d ON p.idProducto = d.idProducto
  5.     INNER JOIN compra co ON d.idCompra = c.idCompra
  6.     INNER JOIN clientes c ON d.idCliente = c.idCliente
  7. WHERE c.idCliente = 1
  8.     AND c.fechaCompra = (SELECT MAX(fechaCompra) FROM compras WHERE idCliente = 1)
Nota: Estoy basandome pura y exclusivamente en lo que tu mismo posteaste más lo que ya te dijeron. No estoy inventando nada... Si hay errores es porque no conozco tus tablas.
Wow!! Impresionante !!
Dificil no lo se, a priori si, pues estoy muy verde en MySQL. Aun asi, magnifico aporte!! Gracias

Etiquetas: diferencia, select, tabla
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 16:02.