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

[SOLUCIONADO] Consulta compleja: INNER JOIN

Estas en el tema de Consulta compleja: INNER JOIN en el foro de Mysql en Foros del Web. Hace ya 3 horas que intento y nada. He buscado realmente referencias en internet, pero poco y nada. Esta consulta es de 3 tablas: las ...
  #1 (permalink)  
Antiguo 28/08/2016, 20:01
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 2 meses
Puntos: 4
Consulta compleja: INNER JOIN

Hace ya 3 horas que intento y nada. He buscado realmente referencias en internet, pero poco y nada.
Esta consulta es de 3 tablas: las claves están perfectamente relacionadas.

3 tablas: "alimentos_usuarios", "alimentos" y "guest" :

La tabla "alimentos" tiene la columna "id_alimentos" como clave primaria y las columnas nombre y kilocalorias.
La tabla "guest" tiene las columnas "id_guest" como clave primaria y otras columnas del usuario guest, como email y fecha.

La tabla alimentos_usuarios es la relación entre ambas tablas. Tiene las columnas "id_alimentos_usuarios" como clave primaria y las columnas "peso_alimentos_valor", "id_alimentos" y "id_guest", estas 2 ultimas como indices para crear adecuadamente la relación.

Hasta acá todo bien. El problema es que despues de esto:

Código MySQL:
Ver original
  1. peso_alimentos_valor, alimentos.nombre, alimentos.kilocalorias
  2. FROM alimentos INNER JOIN alimentos_usuarios ON
  3. (alimentos.id_alimentos = alimentos_usuarios.id_alimentos)
  4. INNER JOIN guest ON (guest.id_guest = alimentos_usuarios.id_guest) ORDER BY id_alimentos_usuarios ASC


Me tira todos los registros, de todos los guest, y yo quiero que me tire solo los registros del guest que contiene una fecha y un email especificamente y no de todos. Realmente debe ser problema de sintaxis, aunque no saltaerror.

En la última parte de la consulta
Código MySQL:
Ver original
  1. INNER JOIN guest ON (guest.id_guest = alimentos_usuarios.id_guest)
[/QUOTE]
Es donce le digo que quiero que el id_guest de la tabla guest sea el mismo que el id_guest de la tabla alimentos_usuarios, asi puedo discriminar el usuario que tenga determinado id_guest. La consulta no discrimina por guest y me tira todos los registros sin importar el guest.
Saludos y gracias por la ayuda de antemano.

Última edición por gnzsoloyo; 29/08/2016 a las 08:22
  #2 (permalink)  
Antiguo 29/08/2016, 01:05
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Consulta compleja: INNER JOIN

Hola omdsetenta,

Sin poder profundizar mucho por falta de tiempo, creo que te falta añadir las condiciones que mencionas:

Código SQL:
Ver original
  1. WHERE guest.fecha = 'la_fecha' AND guest.email = 'el_email'

Espero que te sirva...
  #3 (permalink)  
Antiguo 29/08/2016, 08:24
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 compleja: INNER JOIN

Cita:
Me tira todos los registros, de todos los guest, y yo quiero que me tire solo los registros del guest que contiene una fecha y un email especificamente y no de todos. Realmente debe ser problema de sintaxis, aunque no saltaerror.
En tu query en NINGUN momento le estás indicando qué fecha o e-Mail necesitas filtrar. Nada.
¿Cómo supones que la BBDD sabrá como filtrar, si no le dices qué tiene que filtrar?

Simplemente te está devolviendo todo, y sin errores porque la sintaxis está bien.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 29/08/2016, 12:11
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Consulta compleja: INNER JOIN

Si perfecto rbczgz, lo que sucedía es que antes no tenía bien la sintaxis y me marcaba algunos errores en la cláusula "Where", principalmente era que ponia "email" y no "guest.email", por no estar acostumbrado a asociar tablas. Gracias también gnzsoloyo por aclarar la parte "estratégica" del script.
La solución es agregar así (para el internauta que está desesperado con el inner join sobre 3 tablas, al igual que yo en su momento):

Cita:
$consulta_total="
SELECT peso_alimentos_valor, alimentos.nombre, alimentos.kilocalorias
FROM alimentos
INNER JOIN alimentos_usuarios ON (alimentos.id_alimentos = alimentos_usuarios.id_alimentos)
INNER JOIN guest ON (guest.id_guest = alimentos_usuarios.id_guest)
WHERE guest.email = '".$email."' AND guest.fecha = '".$fecha."' ORDER BY id_alimentos_usuarios ASC";
Y cuando estén muy cansados de pensar en un problema que aparentemente no se soluciona, salir y tomarse un cafe con leche con medialunas, que se aclara el panorama.
Ahora voy a hacer pruebas, empezando por crear una función que tire emails y fechas al azar para ver si está funcionado bien todo. Nos vemos.

Última edición por omdsetenta; 29/08/2016 a las 12:18

Etiquetas: compleja, fecha, join, php, registro, select, tabla, usuarios
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 03:10.