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

Consulta a dos tablas

Estas en el tema de Consulta a dos tablas en el foro de Mysql en Foros del Web. Hola buenas, no se si será posible hacer esta consulta pero bueno esperemos que si... Os comento tengo 2 tablas, en una de ellas tengo ...
  #1 (permalink)  
Antiguo 10/02/2010, 02:31
 
Fecha de Ingreso: febrero-2008
Ubicación: Vigo, España
Mensajes: 150
Antigüedad: 16 años, 2 meses
Puntos: 0
Consulta a dos tablas

Hola buenas, no se si será posible hacer esta consulta pero bueno esperemos que si...

Os comento tengo 2 tablas, en una de ellas tengo los datos de una ficha: id, nombre, telefono, ...
En la otra tabla tengo un historial con los datos, id, id_ficha, fecha, cambio.

La cuestion es que para cada ficha puede existir un numero indeterminado de filas de historial ya que registra todos los cambios que hace el usuario.

La consulta que queria saber si se puede hacer es con una consulta sacar todas las fichas y ademas sacar por cada ficha solamente el ultimo registro del historial.

Espero que quedara claro... Un saludo y gracias ;)
  #2 (permalink)  
Antiguo 10/02/2010, 03:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta a dos tablas

Sí. Vamos por pasos para que lo entiendas. Al final te daré un consulta.

Supongamos que fecha de historial es DATETIME con o que dos modificaciones del mismo dia se ordenaran bien.

Primer paso

Código MySQL:
Ver original
  1. Select F.id,
  2.           F.nombre,
  3.           F.telefono, ... ,
  4.           max(H.fecha) UltimoHistorial
  5. FROM fichas F left join historial H
  6.         on F.id=H.id_ficha
  7. group by F.id, F.nombre, F.telefono, ... ;

Así tenemos el ultimo registro de historial relacionado con cada ficha.

Código MySQL:
Ver original
  1. Select sbc.id, sbc.nombre, sbc.telefono, ... , H2.fecha, H2.cambio
  2. FROM  (Select F.id,
  3.                  F.nombre,
  4.                  F.telefono, ... ,
  5.                  max(H.fecha) UltimoHistorial
  6.               FROM fichas F left join historial H
  7.                        on F.id=H.id_ficha
  8.                        group by F.id, F.nombre, F.telefono, ... ) sbc
  9.           INNER JOIN historial H2
  10.                  ON sbc.UltimoHistorial=H2.fecha
  11.                            AND sbc.id=H2.id_ficha;

Volvemos a relacionar la consulta primera (sbc) con la tabla historial (H2) y obtenemos el resultado pedido.

Quim
  #3 (permalink)  
Antiguo 10/02/2010, 05:50
 
Fecha de Ingreso: febrero-2008
Ubicación: Vigo, España
Mensajes: 150
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Consulta a dos tablas

Muchisimas gracias, pedazo de consulta...

La he adaptado a la mia y casi funciona del todo. Pero el único problema que tengo es que solo me muestra las fichas que tienen una ficha en el historial, y me interesaría tambien que me devolviera las que no tienen ninguna.

Te dejo aqui como la adapte para mis datos:

Código MySQL:
Ver original
  1. SELECT sbc.* , H2.id
  2. (SELECT F.*, max(H.fecha) UltimoHistorial
  3. FROM datos_form F LEFT JOIN historial H
  4. on F.id=H.id_form
  5. GROUP BY F.id) sbc
  6. INNER JOIN historial H2
  7. ON sbc.UltimoHistorial=H2.fecha
  8. AND sbc.id=H2.id_form;
  #4 (permalink)  
Antiguo 10/02/2010, 07:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta a dos tablas

Código MySQL:
Ver original
  1. SELECT sbc.* , H2.id
  2. (SELECT F.*, max(H.fecha) UltimoHistorial
  3. FROM datos_form F LEFT JOIN historial H
  4. on F.id=H.id_form
  5. GROUP BY F.id) sbc
  6. LEFT JOIN historial H2
  7. ON sbc.UltimoHistorial=H2.fecha
  8. AND sbc.id=H2.id_form;


Ya...

Quim
  #5 (permalink)  
Antiguo 10/02/2010, 09:17
 
Fecha de Ingreso: febrero-2008
Ubicación: Vigo, España
Mensajes: 150
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Consulta a dos tablas

Jejeje esta mañana ya probara lo de cambiar INNER por LEFT y me funcionara bien y al postearlo no me funcionaba bien el foro y no me lo dejaba publicar ;)

Muchas gracias ahora me funciona todo perfectamente

Etiquetas: dos, tablas
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 06:22.