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

Relacionar 3 tablas Mysql

Estas en el tema de Relacionar 3 tablas Mysql en el foro de Mysql en Foros del Web. Hola desde ayer que estoy con un problemilla que no puedo relacionar 3 tablas para obtener sus datos correctamente. Estoy creando un sitio simple en ...
  #1 (permalink)  
Antiguo 27/09/2012, 17:09
 
Fecha de Ingreso: septiembre-2012
Mensajes: 25
Antigüedad: 12 años, 1 mes
Puntos: 0
Relacionar 3 tablas Mysql

Hola desde ayer que estoy con un problemilla que no puedo relacionar 3 tablas para obtener sus datos correctamente. Estoy creando un sitio simple en donde puedan hacer un post y agregar hasta 4 imagenes x post.
Lo que quiero hacer es sacar los datos de 3 tablas la primera es
Tabla imagenes
Código MySQL:
Ver original
  1. nombre_img
  2.    id_post
Tabla categoria
Código MySQL:
Ver original
  1. id_categoria
  2.  nombre

Tabla post
Código MySQL:
Ver original
  1. id_post
  2.  id_cat
  3.  titulo
  4. texto


bueno esas son las 3 tablas quiero relacionar la tabla Post con imagenes y categorias.
Hize la consulta con where y and pero, me da los datos de solo los post q tienen imagenes y los que no tiene no me los devuelve.
Tambien intente con JOIN y LEFT JOIN pero me duplica todos los campos .Tal vez lo estoy haciendo mal pero aca dejo la consulta que estuve probando
Código MySQL:
Ver original
  1. SELECT * FROM post as p JOIN categoria as c ON p.id_cat = c.id_categoria
  2. LEFT JOIN imagenes as i ON p.id_post = i.id_post

Última edición por status02; 27/09/2012 a las 17:19
  #2 (permalink)  
Antiguo 27/09/2012, 18:41
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 8 meses
Puntos: 7
Respuesta: Relacionar 3 tablas Mysql

Hola Status02

Fijate si de esta forma te sirve

Código SQL:
Ver original
  1. SELECT post.*, categoria.*, imagenes.*
  2. FROM post, categoria
  3. LEFT JOIN imagenes
  4. ON imagenes.id_post = post.id_post
  5. WHERE categoria.id_categoria = post.id_cat

Saludos!
  #3 (permalink)  
Antiguo 30/09/2012, 15:38
 
Fecha de Ingreso: septiembre-2012
Mensajes: 25
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Relacionar 3 tablas Mysql

Cita:
Iniciado por Garot Ver Mensaje
Hola Status02

Fijate si de esta forma te sirve

Código SQL:
Ver original
  1. SELECT post.*, categoria.*, imagenes.*
  2. FROM post, categoria
  3. LEFT JOIN imagenes
  4. ON imagenes.id_post = post.id_post
  5. WHERE categoria.id_categoria = post.id_cat

Saludos!
No amigo me da un error diciendo que la columna imagenes.id_post no existe, pero esa columna si esta.
  #4 (permalink)  
Antiguo 30/09/2012, 15:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Relacionar 3 tablas Mysql

Cita:
No amigo me da un error diciendo que la columna imagenes.id_post no existe, pero esa columna si esta.
Entonces haz esta consulta, copia y postea el resultado y veremos:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE imagenes;
__________________
¿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 30/09/2012, 16:24
 
Fecha de Ingreso: septiembre-2012
Mensajes: 25
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Relacionar 3 tablas Mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Entonces haz esta consulta, copia y postea el resultado y veremos:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE imagenes;
Aca dejo el resultado
  #6 (permalink)  
Antiguo 30/09/2012, 16:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Relacionar 3 tablas Mysql

No copies imagenes.
Quiero el resultado, no su imagen. El resultado como texto contenido en el campo que se visualiza.
¿Se entiende?
__________________
¿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 30/09/2012, 16:59
 
Fecha de Ingreso: septiembre-2012
Mensajes: 25
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Relacionar 3 tablas Mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No copies imagenes.
Quiero el resultado, no su imagen. El resultado como texto contenido en el campo que se visualiza.
¿Se entiende?
El unico resultado de la consulta q me dijiste arriba dice q se ejecuto con exito, luego SHOW CREATE TABLE imagenes y por ultimo me da el resultado de la tabla creada
CREATE TABLE `imagenes` (
`nombre_img` varchar(15) COLLATE utf8_spanish_ci NOT NULL,
`id_post` int(5) NOT NULL
)

Eso es lo unico que me muestra.
  #8 (permalink)  
Antiguo 30/09/2012, 17:16
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 12 años, 1 mes
Puntos: 38
Respuesta: Relacionar 3 tablas Mysql

Hola status 02 , mira llevos 2 semanas peleandome con mysql.... y escribo desde movil a punto de dormir ¡ a ver si mañana te puedo responder mejor aunque estoy seguro de q cerraran antes pues por aqui hay unos máquinas... :) yo inentaria algo como un
Código:
  select campost1 from ( select campost2 where condicion campot1=campot3)
lo he escrito al vuelo pero es una idea...
Saludos¡
  #9 (permalink)  
Antiguo 30/09/2012, 19:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Relacionar 3 tablas Mysql

Cita:
Iniciado por status02 Ver Mensaje
El unico resultado de la consulta q me dijiste arriba dice q se ejecuto con exito, luego SHOW CREATE TABLE imagenes y por ultimo me da el resultado de la tabla creada
CREATE TABLE `imagenes` (
`nombre_img` varchar(15) COLLATE utf8_spanish_ci NOT NULL,
`id_post` int(5) NOT NULL
)

Eso es lo unico que me muestra.
Es lo que quería comprobar, ya que muchas veces insisten en que una columna existe, o se llama así, y termina siendo que no es tal.
Ahora bien, en ese contexto, el problema se debe estar dando porque estás mezclando un JOIN implícito con un LEFT JOIN, lo que genera resultados totalmente incorrectos.
Cuando usas INNER/RIGHT/LEFT JOIN no puedes usar el implícito (la coma).
La sintaxis correcta para tu caso sería (usando alias):
Código MySQL:
Ver original
  1. SELECT P.*, C.*, I.*
  2. FROM post P
  3.     INNER JOIN categoria C ON P.id_cat = C.id_categoria
  4.     LEFT JOIN imagenes I ON P.id_post = I.id_post;

Como problema potencial encuentro que puede producirse una multiplicación de resultados porque estás estableciendo una relación en estrella, lo que no es una buena idea.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 01/10/2012, 16:02
 
Fecha de Ingreso: septiembre-2012
Mensajes: 25
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Relacionar 3 tablas Mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Es lo que quería comprobar, ya que muchas veces insisten en que una columna existe, o se llama así, y termina siendo que no es tal.
Ahora bien, en ese contexto, el problema se debe estar dando porque estás mezclando un JOIN implícito con un LEFT JOIN, lo que genera resultados totalmente incorrectos.
Cuando usas INNER/RIGHT/LEFT JOIN no puedes usar el implícito (la coma).
La sintaxis correcta para tu caso sería (usando alias):
Código MySQL:
Ver original
  1. SELECT P.*, C.*, I.*
  2. FROM post P
  3.     INNER JOIN categoria C ON P.id_cat = C.id_categoria
  4.     LEFT JOIN imagenes I ON P.id_post = I.id_post;

Como problema potencial encuentro que puede producirse una multiplicación de resultados porque estás estableciendo una relación en estrella, lo que no es una buena idea.
Gracias, y como decis me da una multiplicacion de datos como antes, mi pregunta ahora es ¿como relaciono estas 3 tablas ? para tener resultados correctos, es mi primer trabajo que estoy haciendo pero me he topado con algunos problemas como el mensionado. Desde ya agradesco tu ayuda.

Etiquetas: join, relacionar, select, tabla, tablas, campos
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:22.