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

Consulta 3 tablas

Estas en el tema de Consulta 3 tablas en el foro de Mysql en Foros del Web. Queria hacer una consulta a estas tres tablas: usuarios_ampliado - ID_USUARIO - NOMBRE - APELLIDOS fotos - ID - ID_SECCION - iD_ELEMENTO fotos_dimensiones - ID_FOTO ...
  #1 (permalink)  
Antiguo 26/01/2011, 05:42
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Consulta 3 tablas

Queria hacer una consulta a estas tres tablas:

usuarios_ampliado
- ID_USUARIO
- NOMBRE
- APELLIDOS

fotos
- ID
- ID_SECCION
- iD_ELEMENTO


fotos_dimensiones
- ID_FOTO
- DIMENSIONES
- NOMBRE_FICHERO


Resulta que tengo que sacar el nombre y apellidos del usuario, y el nombre de la foto (solo si ha subido la foto). Uso left join, pero luego en la siguiente tabla no lo hace por que el left join lo hago sobre usuarios_ampliado, y deberia hacerlo sobre fotos

Código MySQL:
Ver original
  1. SELECT ua.NOMBRE, ua.APELLIDOS, fd.NOMBRE_FICHERO AS IMG
  2.                     FROM usuarios_ampliado ua LEFT JOIN fotos f ON f.ID_SECCION = 4 AND f.ID_ELEMENTO = ua.ID_USUARIO
  3.                     LEFT JOIN  fotos_dimensiones  fd ON fd.ID_FOTO = f.ID AND fd.DIMENSIONES = '60x60'
  4.                     WHERE ua.ID_USUARIO = 1 LIMIT 1


Cual seria la forma correcta de hacer los left joins?
Gracias!
  #2 (permalink)  
Antiguo 26/01/2011, 06:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Busqueda Respuesta: Consulta 3 tablas

Código MySQL:
Ver original
  1. SELECT ua.NOMBRE,
  2.        ua.APELLIDOS,
  3.        sbc.NOMBRE_FICHERO AS IMG
  4. FROM usuarios_ampliado ua
  5.        LEFT JOIN ((SELECT * FROM fotos f
  6.                        WHERE f.ID_SECCION = 4 ) sbcF
  7.                   INNER JOIN (SELECT * FROM fotos_dimensiones fd
  8.                                  WHERE fd.DIMENSIONES = '60x60') sbcFd
  9.                   ON sbcFd.ID_FOTO = sbcF.ID) sbc
  10.           ON sbc.ID_ELEMENTO = ua.ID_USUARIO
  11.   WHERE ua.ID_USUARIO = 1 LIMIT 1

1. Todos los usuarios
LEFT JOIN
2. Fotos seccion 4
INNER JOIN
3. Fotos 60x60

Con lo que tendras una lista de todos los usuarios tengan o no foto, pero solo se mostrará la fotos de los que tengan una foto que cumpla las condiciones.


esto creo que tambien...

Código MySQL:
Ver original
  1. SELECT ua.NOMBRE,
  2.        ua.APELLIDOS,
  3.        fd.NOMBRE_FICHERO AS IMG
  4. FROM ((usuarios_ampliado ua
  5.     LEFT JOIN fotos f
  6.       ON f.ID_ELEMENTO = ua.ID_USUARIO)
  7.     LEFT JOIN fotos_dimensiones fd
  8.       ON fd.ID_FOTO = f.ID )
  9.   WHERE f.ID_SECCION = 4
  10.          AND fd.DIMENSIONES = '60x60'
  11.          AND ua.ID_USUARIO = 1 LIMIT 1
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 27/01/2011, 07:52
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Consulta 3 tablas

quimfv muchas gracias, no entiendo bien que es lo que has hecho, pero parece que no funciona, la primera me da error de composicion del sql, la segunda solo me da el resultado cuando tiene imagen.

De momento lo he solucionado haciendo dos consultas por separado en el script, pero supngo que tiene que haber una forma de unirla.
  #4 (permalink)  
Antiguo 27/01/2011, 08:25
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, 5 meses
Puntos: 2658
Respuesta: Consulta 3 tablas

Cita:
la primera me da error de composicion del sql,
¿A qué te refieres con eso?
¿Error de sintaxis o realmente te está diciendo de "composición"?
__________________
¿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 27/01/2011, 12:54
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Consulta 3 tablas

error de sintaxis
  #6 (permalink)  
Antiguo 27/01/2011, 13:00
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, 5 meses
Puntos: 2658
Respuesta: Consulta 3 tablas

¿Podrías poner exactamente lo que te dice?
Sería más fácil darte soluciones si eres un poco más preciso.

Por que esto:
Código MySQL:
Ver original
  1.     ua.NOMBRE,
  2.     ua.APELLIDOS,
  3.     fd.NOMBRE_FICHERO IMG
  4.     usuarios_ampliado ua
  5.     LEFT JOIN
  6.     fotos f ON f.ID_ELEMENTO = ua.ID_USUARIO
  7.     LEFT JOIN
  8.     fotos_dimensiones fd ON fd.ID_FOTO = f.ID
  9.     f.ID_SECCION = 4 AND
  10.     fd.DIMENSIONES = '60x60' AND
  11.     ua.ID_USUARIO = 1
no tiene ningún error de sintaxis.

¿Estás seguro de estar usando una versión actualizada de MySQL?
__________________
¿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/01/2011, 06:54
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Consulta 3 tablas

esa consulta esta bien, es la otra la que sale error.
En esa consulta el problema es que si el usuario no tiene imagen no da ningun resultado, y lo suyo seria que diese resultado y el NOMBRE_FICHERO fuera NULL
  #8 (permalink)  
Antiguo 29/01/2011, 08:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta 3 tablas

las condiciones del where que no tienen que ver con la tabla usuarios son la causa del problema. No puedes pedir que te busque fotos de la sección 4 y de tamaño 60 X 60, y que, a la vez, te saque los nombres de usuarios que no tienen foto siquiera. La solución de Quimfv lo consigue, pues primero te saca las fotos con los parámetros y luego cruza los nombres de todos aquellos que no cumplen con esa condición. Pero es en sí la consulta la que no tiene mucho sentido como consulta única.

Etiquetas: 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 14:04.