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

Traer ultimos registros de una tabla "relacionada" con otra tabla.

Estas en el tema de Traer ultimos registros de una tabla "relacionada" con otra tabla. en el foro de Mysql en Foros del Web. ¡Hola a todos! A ver si logro expresarme correctamente... Estoy intentando hacer algo similar a un Fotolog y me acaba de surgir un problema a ...
  #1 (permalink)  
Antiguo 07/07/2008, 00:49
 
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 15 años, 9 meses
Puntos: 0
Exclamación Traer ultimos registros de una tabla "relacionada" con otra tabla.

¡Hola a todos!

A ver si logro expresarme correctamente...

Estoy intentando hacer algo similar a un Fotolog y me acaba de surgir un problema a la hora de mostrar la ULTIMA foto de cada amigo de un usuario ordenada por FECHA descendente.
Tal vez el problema esté al querer hacerlo todo en UNA sola consulta.
Paso a graficar las tablas:

TABLA "amigos"

id - id_usuario - id_amigo


TABLA "fotos"

id - id_usuario - fecha - foto - mensaje


Lo que estoy tratando de hacer es, a partir del ID del usuario, buscar a sus amigos y traer la última foto de cada uno de ellos.
¿Soy claro?
Ojalá puedan ayudarme.

Desde ya, muchas gracias.

Saludos,
Fernando.
  #2 (permalink)  
Antiguo 07/07/2008, 01:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Traer ultimos registros de una tabla "relacionada" con otra tabla.

Cita:
TABLA "amigos"

id - id_usuario - id_amigo


TABLA "fotos"

id - id_usuario - fecha - foto - mensaje

Lo que estoy tratando de hacer es, a partir del ID del usuario, buscar a sus amigos y traer la última foto de cada uno de ellos.
Creo que te falta una tabla, la de usuarios, porque un amigo de usuario será también un usuario. Creo que necesitas esa tabla en la que id_usuario será PK. Lo que tienes te obligará a indexar id_usuario e id_amigo de la tabla amigos, y creo que la otra será una estructura más eficaz, aunque te obligue a realizar otro cruce. No obstante, te pondré lo que yo haría con lo que tienes.

Si buscamos las fotos últimas de los amigos del usuario con id_usuario 5.

SELECT a.id_amigo, T1.foto, T1.fechafoto FROM amigos a INNER JOIN (SELECT f.id_usuario, MAX(f.fecha) as fechafoto, f.foto AS foto FROM fotos f GROUP BY id_usuario) AS T1 ON a.id_amigo = f.id_usuario WHERE a.id_usuario = 5

No lo he probado
  #3 (permalink)  
Antiguo 07/07/2008, 06:18
 
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Traer ultimos registros de una tabla "relacionada" con otra tabla.

Cita:
Iniciado por jurena Ver Mensaje
Creo que te falta una tabla, la de usuarios, porque un amigo de usuario será también un usuario. Creo que necesitas esa tabla en la que id_usuario será PK. Lo que tienes te obligará a indexar id_usuario e id_amigo de la tabla amigos, y creo que la otra será una estructura más eficaz, aunque te obligue a realizar otro cruce. No obstante, te pondré lo que yo haría con lo que tienes.

Si buscamos las fotos últimas de los amigos del usuario con id_usuario 5.

SELECT a.id_amigo, T1.foto, T1.fechafoto FROM amigos a INNER JOIN (SELECT f.id_usuario, MAX(f.fecha) as fechafoto, f.foto AS foto FROM fotos f GROUP BY id_usuario) AS T1 ON a.id_amigo = f.id_usuario WHERE a.id_usuario = 5

No lo he probado
Cierto, olvidé mencionar la tabla usuario y los datos que necesito traer de cada una.

La tabla usuarios estaría conformada de la siguiente manera:

id - usuario - clave - mail - fecha_registro - ultimo_login

Los datos que yo necesito traer son:

El ULTIMO ID y fecha de cada amigo de la tabla fotos con su respectivo nombre de usuario sacado de la tabla usuarios ordenado por la fecha de la foto y no por el orden en el que estan en la tabla amigos.

P/S: probé eso que me pasaste y no funcionó. Intenté hacerle algunas modificaciones y tampoco me dió resultado. Todavía no entiendo bien todo esto de los JOINS :(
  #4 (permalink)  
Antiguo 07/07/2008, 07:05
 
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Traer ultimos registros de una tabla "relacionada" con otra tabla.

¡Solucionado!
No sé si fue la mejor manera, pero gracias a vos jurena logré hacerlo :D
Y me quedó así:

SELECT T1.id,DATE_FORMAT(T1.fecha,'%d/%m/%y') AS date,u.usuario FROM usuarios AS u,amigos AS a INNER JOIN (SELECT MAX(f.id) AS id,f.id_usuario,MAX(f.fecha) AS fecha FROM fotos AS f GROUP BY id_usuario) AS T1 ON T1.id_usuario=a.id_amigo WHERE a.id_amigo=u.id AND a.id_usuario=ID ORDER BY T1.fecha DESC

Mil gracias!
A tu disposición para lo que necesites.

Saludos,
Fernando.

Última edición por BRiLo; 08/07/2008 a las 10:06
  #5 (permalink)  
Antiguo 08/07/2008, 09:36
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Respuesta: Traer ultimos registros de una tabla "relacionada" con otra tabla.

BRiLo, que bueno solucionaras tu problema, pero para la próxima, por favor NO coloques código de programación o variables de código en tus consultas ok? Trata de usar SQL puro.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #6 (permalink)  
Antiguo 08/07/2008, 10:04
 
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Traer ultimos registros de una tabla "relacionada" con otra tabla.

Te pido mil disculpas BrujoNic, no volverá a ocurrir.

Muchas gracias.

Saludos,
Fernando.
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 04:27.