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

Obtener el ultimo registro con un join

Estas en el tema de Obtener el ultimo registro con un join en el foro de Mysql en Foros del Web. Bueno, en el titulo no me pude explicar bien a que me refiero. Estoy en la etapa de diseno de un sistema, el cual tiene ...
  #1 (permalink)  
Antiguo 27/12/2007, 15:18
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 19 años
Puntos: 4
Obtener el ultimo registro con un join

Bueno, en el titulo no me pude explicar bien a que me refiero.
Estoy en la etapa de diseno de un sistema, el cual tiene una tabla que contiene los datos generales de personas, y en otras 2 tablas se almacenan los pagos hechos por las personas y las llamadas telefonicas hechas a este.
Pues en una pantalla principal debo mostrar los datos generales de las personas incluyendo la ultima fecha o ultima vez que realizo un pago y la ultima gestion o llamada que se le hizo, pues antes de decidir el diseno final, me gustaria saber, considerando estas tres tablas, como seria un select que me devuelva esta info, es decir algo asi

Código:
SELECT a.cuenta,a.nombre, a.direccion,a.telefono, 
(SELECT fecha_pago,valor_pago FROM lista_pagos WHERE cuenta='10000' ORDER BY fecha_pago DESC LIMIT 1) , 
(SELECT fecha_gestion FROM gestiones WHERE cuenta='10000' ORDER BY fecha_gestion DESC LIMIT 1)  
FROM cuentas 
WHERE cuenta='10000'
es posible hacer esto? es que nunca lo he hecho y quiero estar seguro antes de tener el diseño, y si no se puede, como me sugeririan que fuera el diseno para poder obtener estos datos?
bueno, cree unas tablas con una estructura similar y pues no me funciona una consulta como esta, que me sugieren?
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.

Última edición por xcars; 27/12/2007 a las 15:37 Razón: codigo equivocado, ya probe el diseno
  #2 (permalink)  
Antiguo 27/12/2007, 15:46
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años, 1 mes
Puntos: 4
Re: Obtener el ultimo registro con un join

Tengo entendido que lo que pides se puede realizar pero porque no usas los JOIN

por ejp:

SELECT a.cuenta, a.nombre, a.direccion, a.telefono, MAX(fecha_pago), valor_pago, MAX(fecha_gestion)
FROM cuentas a LEFT JOIN lista_pagos ON (a.cuenta = lista_pagos.cuenta)
LEFT JOIN gestiones ON (a.cuenta = gestiones.cuenta)
WHERE cuenta = '10000'

creo que esta bien, lo hice al vuelo...

saludos
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #3 (permalink)  
Antiguo 27/12/2007, 15:49
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 19 años
Puntos: 4
Re: Obtener el ultimo registro con un join

ahorita lo probare, pues no use los join, pues pk tambien escribi al vuelo, y pense que seria mas facil entender que era lo que necesito si lo ponia asi... ahorita probare el codigo y doy mi respuesta

Cita:
Iniciado por omar1977 Ver Mensaje
Tengo entendido que lo que pides se puede realizar pero porque no usas los JOIN

por ejp:

SELECT a.cuenta, a.nombre, a.direccion, a.telefono, MAX(fecha_pago), valor_pago, MAX(fecha_gestion)
FROM cuentas a LEFT JOIN lista_pagos ON (a.cuenta = lista_pagos.cuenta)
LEFT JOIN gestiones ON (a.cuenta = gestiones.cuenta)
WHERE cuenta = '10000'

creo que esta bien, lo hice al vuelo...

saludos
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #4 (permalink)  
Antiguo 27/12/2007, 15:59
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 19 años
Puntos: 4
Re: Obtener el ultimo registro con un join

Pues asi fue como me funciono al final, pero nose si sera el mejor codigo... con max y min no recibia ninguna diferencia

Código:
SELECT a.cuenta_id, a.cuenta_nombre, pago_fecha, pago_valor,gestion_fecha,gestion_texto
FROM cuentas a LEFT JOIN pagos ON (a.cuenta_id = pagos.cuenta_id)
LEFT JOIN gestiones ON (a.cuenta_id=gestiones.cuenta_id)
WHERE a.cuenta_id = 1
ORDER BY pago_FEcha desc,gestion_Fecha desc
limit 1
ah por cierto, en este momento solo esta relacionada con pagos,
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #5 (permalink)  
Antiguo 28/12/2007, 12:46
Avatar de pragone  
Fecha de Ingreso: diciembre-2007
Ubicación: Madrid
Mensajes: 223
Antigüedad: 16 años, 4 meses
Puntos: 2
Re: Obtener el ultimo registro con un join

Sí, así funciona bien.

Realmente no soy muy versado en las capacidades de optimización de las Subqueries, pero asumiría que todo depende de cómo tengas planteados los índices.

Si en gestión y en pago tienes índices por (cuenta_id, fecha), el join es una muy buena opción pues seguramente el query será de tipo "Range".

Si sólo tienes índices por las fechas, es posible que vaya mejor el subquery.

Igualmente, si estimas que no habrá muchos pagos/gestiones, el join debe funcionar bastante bien. Es cuestión de probar.
  #6 (permalink)  
Antiguo 28/12/2007, 15:43
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 19 años
Puntos: 4
Re: Obtener el ultimo registro con un join

Cita:
Iniciado por pragone Ver Mensaje
Sí, así funciona bien.

Realmente no soy muy versado en las capacidades de optimización de las Subqueries, pero asumiría que todo depende de cómo tengas planteados los índices.

Si en gestión y en pago tienes índices por (cuenta_id, fecha), el join es una muy buena opción pues seguramente el query será de tipo "Range".

Si sólo tienes índices por las fechas, es posible que vaya mejor el subquery.

Igualmente, si estimas que no habrá muchos pagos/gestiones, el join debe funcionar bastante bien. Es cuestión de probar.
la tasa de crecimiento es bien poca, comparada con la capacidad de mysql.. que 10,000 a 15K registros al anio... talvez un poco mas...
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
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 17:48.