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

Relacion de 3 Tablas

Estas en el tema de Relacion de 3 Tablas en el foro de Mysql en Foros del Web. Hola, tengo un problemita haber si me pueden dar una mano. Tengo una TablaA con los campos-> Id Datos Tengo una TablaB con los campos-> ...
  #1 (permalink)  
Antiguo 03/03/2012, 11:35
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 8 años, 8 meses
Puntos: 9
Relacion de 3 Tablas

Hola, tengo un problemita haber si me pueden dar una mano.

Tengo una TablaA con los campos->
Id
Datos

Tengo una TablaB con los campos->
Id
Nombre

Tengo una TablaC con los campos->
Id
Nombre

------- o -------

Ahora las 3 tablas se relacionan con el campo Id.
En la tablaA para diferenciar el id de TablaB con el de TablaC se le agrego atras del numero id la letra "e". Osea e123 <- Siendo 123 el id de la TablaC

Lo que yo quiero es hacer una consulta a la TablaA con solo los valores de la TablaC, entonces lo que hice fue

Código PHP:
SELECT FROM `TablaA
INNER JOIN `TablaCON TablaA.id =  'e'+TablaC.id 
Pero la consulta no me devuelve solo los campos que se relacionan con la TablaC
__________________
Los mejores juegos de PC gratis en ******
  #2 (permalink)  
Antiguo 03/03/2012, 12:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 11 años, 8 meses
Puntos: 300
Respuesta: Relacion de 3 Tablas

SELECT *
FROM TablaA
INNER JOIN TablaC` ON TablaA.id = replace( TablaC.id, 'e', '' )
  #3 (permalink)  
Antiguo 03/03/2012, 20:49
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 8 años, 8 meses
Puntos: 9
Respuesta: Relacion de 3 Tablas

Muchas gracias por responder pero sabes que me muestra solo los datos de la tablaB, probe tambien haciendo esto

SELECT *
FROM TablaA
INNER JOIN `TablaC` ON TablaA.id = replace( TablaC.id, 'e', '' )
INNER JOIN `TablaB` ON TablaA.id = TablaB.id
WHERE id<>TablaB.id
__________________
Los mejores juegos de PC gratis en ******
  #4 (permalink)  
Antiguo 04/03/2012, 03:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 11 años, 8 meses
Puntos: 300
Respuesta: Relacion de 3 Tablas

SELECT *
FROM TablaA
INNER JOIN TablaC` ON replace( TablaA.id, 'e', '' ) = TablaC.id
Eso por lo que se refiere a las tablas A y B. Pero no nos dices con qué tipo de id guarda la TablaB, si como el de tablaA o como el de tablaB. Eso es necesario para relacionar con una o con otra y evitar un nuevo replace. A ver si el id de tablaA es e153, y el de la tablaB 153, ¿cómo es el que guardas en la tabla B? Pon un ejemplo con varios datos de las tres tablas y lo que quieres mostrar con la consulta.
  #5 (permalink)  
Antiguo 04/03/2012, 09:14
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 8 años, 8 meses
Puntos: 9
Respuesta: Relacion de 3 Tablas

Perdon por no ser tan detallado.

El id de la tablaA tengo el registro id que tiene valores como e123 para la tablaC y valores 123 para la tablaB

en la tablaB el registro id tien valores 123
en la tablaC el registro id tien valores 123

Al tener estas dos ultimas tablas el mismo id, para diferenciarlas, en la tablaA cuando era un registro de la tablaC le agregaba delante la letra e, quedando e123

Por eso mismo si reemplazo la "e" por nada, como me pusiste ahi, tomaria el id de la otra tabla pienso yo...
__________________
Los mejores juegos de PC gratis en ******
  #6 (permalink)  
Antiguo 04/03/2012, 10:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 11 años, 8 meses
Puntos: 300
Respuesta: Relacion de 3 Tablas

¿Qué relación hay entre las tres tablas?, me refiero a los datos. ¿Qué tipo de datos hay y por qué has cambiado ese id? Sin que nos digas el tipo de datos que almacenas y las relaciones entre ellos, y lo que quieres sacar, será difícil que pueda entenderte. Dinos por qué razón creaste esas tres tablas para guardar qué datos y cómo se relacionan entre ellos, y si es posible con algún ejemplo. Tal vez ni siquiera es necesario ese cambio que has hecho añadiendo la e.
  #7 (permalink)  
Antiguo 04/03/2012, 11:22
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 8 años, 8 meses
Puntos: 9
Respuesta: Relacion de 3 Tablas

En la tablaA quiero hacer una consulta que solo devuelva los registros "datos" que se relacionan con la tablaC y ademas de mostrar el registro "datos" de la tablaA quiero mostrar los registros que se relacionaron de la tablaC.

Quiero hacer un foreach que me devuelva cada dato del registro de la tablaA con su relacion de la tablaC

Le agregue la "e" para diferenciar el id de la tablaB con la tablaC, porque en la tablaB hay registros id que son iguales a registros que tiene la tablaC.
__________________
Los mejores juegos de PC gratis en ******
  #8 (permalink)  
Antiguo 04/03/2012, 16:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 11 años, 8 meses
Puntos: 300
Respuesta: Relacion de 3 Tablas

Por favor, pon un ejemplo como este
TablaA
id | nombrecampo
e123 | carnes

TablaB
id | nombrecampo
123 | vaca
123 | pollo

TablaC
id | nombrecampo
123 | asada
123 | cocida

y luego dinos qué querrías que saliera. Si algo no es como te he puesto, ponlo como tú lo tienes.
  #9 (permalink)  
Antiguo 04/03/2012, 16:44
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 8 años, 8 meses
Puntos: 9
Respuesta: Relacion de 3 Tablas

TablaA
id | nombrecampo
e123 | mi nombre es
e121 | mi mujer le gusta
123 | mi apellido es
125 | mi perro se llama

TablaB
id | nombrecampo
123 | gonzales
125 | juancho

TablaC
id | nombrecampo
123 | pedro
121 | el asado

entonces lo que quiero es hacer una consulta a la tablaA que me devuelva solo las que se relacionan con la tablaC, para que devuelva

mi nombre es pedro
mi mujer le gusta el asado
__________________
Los mejores juegos de PC gratis en ******
  #10 (permalink)  
Antiguo 05/03/2012, 10:37
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 8 años, 8 meses
Puntos: 9
Respuesta: Relacion de 3 Tablas

Up!, aver si alguien me puede dar una manito
__________________
Los mejores juegos de PC gratis en ******
  #11 (permalink)  
Antiguo 05/03/2012, 10:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Relacion de 3 Tablas

La consulta base es simple, pero esto:
Cita:
Le agregue la "e" para diferenciar el id de la tablaB con la tablaC, porque en la tablaB hay registros id que son iguales a registros que tiene la tablaC.
no tengo adjetivos para calificarlo.
Te diré que lo que tienes es un muy mal diseño de datos, porque lo que está intentado hacer es usar una misma FK para apuntar a dos tablas distintas, y eso simplemente no se debe hacer. Esencialmente ese es el problema: Lo que planteas es un error de diseño.
Normalmente esto se debería resolver por medio de herencia, pero no de esta forma.
No hay una correcta solución para lo que planteas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 05/03/2012, 12:23
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 8 años, 8 meses
Puntos: 9
Respuesta: Relacion de 3 Tablas

Es que el problema es el siguiente. La tablaB y la tablaC, no podia controlar que no se repitan los id entre las 2 tablas, osea que si tiene el id 123 la tablaB, que la tablaC no lo repita. Entonces la unica opcion que llegue fue, en la tablaA diferenciarlo agregando una letra adelante.

Especifico para que uso las tablas capaz resulta mas sencillo de entender, la tablaA es la de los comentarios, ahi se guardan los comentarios de los usuarios y el id del post donde se hizo dicho comentario, la tablaB es una categoria, son los post de noticias;y la tablaC es otra categoria, son los post de peliculas.

Entonces cuando alguien comentaba en un post de peliculas, en el id del post de la tablaA (la de comentarios) agregaba el id del post de pelicula y adelante una letra, para diferenciar esa categoria de la categoria noticias.

Si hay una forma mejor de hacerlo porfavor diganmelo, para ya saberlo, pero tambien como solucionar esto, porque ya no puedo cambiar todos los id de los post ya echos :S
__________________
Los mejores juegos de PC gratis en ******
  #13 (permalink)  
Antiguo 05/03/2012, 17:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 11 años, 8 meses
Puntos: 300
Respuesta: Relacion de 3 Tablas

Para lo que tienes, que a mí no me gusta tampoco, puedes usar esto:
Código MySQL:
Ver original
  1. SELECT a.nombrecampo, b.nombrecampo FROM `tablaA` a INNER JOIN tablaB b ON  a.id = b.id
  2. SELECT a.nombrecampo, c.nombrecampo FROM `tablaA` a INNER JOIN tablaC c ON  a.id = CONCAT('e',c.id)

Nada nos dices de la naturaleza de los campos, si son INT algunos de esos id.
  #14 (permalink)  
Antiguo 06/03/2012, 12:34
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 8 años, 8 meses
Puntos: 9
Respuesta: Relacion de 3 Tablas

Eres increible, funciono a la perfeccion, un millon de gracias maestro!
__________________
Los mejores juegos de PC gratis en ******
  #15 (permalink)  
Antiguo 06/03/2012, 14:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 11 años, 8 meses
Puntos: 300
Respuesta: Relacion de 3 Tablas

Me alegro, aunque para mejorar la estructura deberías ofrecer más datos. Como ves, no es necesario cambiar el id. Hubiera bastado con hacer la relación con una tabla, y luego con la otra. Pero bueno, para eso deberías dar más datos sobre la estructura de las tablas, pero al vuelo te digo que marcando en la tabla A si se trata de comentario de noticias o comentario de películas, un campo del tipo varchar pequeño, con valores N y P, te hubiera bastado para hacer las consultas, añadiendo claro el filtro correspondiente.

SELECT FROM tablaA INNER JOIN con tablaB where tablaA.tpcomentario = 'N'
UNION ALL
SELECT FROM tablaA INNER JOIN con tablaC where tablaA.tpcomentario = 'P'

y ya está. No hubiera sido necesario cambiar el id. Se carga automáticamente y ya está.
  #16 (permalink)  
Antiguo 07/03/2012, 13:32
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 8 años, 8 meses
Puntos: 9
Respuesta: Relacion de 3 Tablas

Claro, toda la razon, agregando un campo mas nomas, es que esto lo habia echo hace un tiempito atras y no tenia los suficienes conocimientos mysql, aunque todavia sigo aprendiendo por como ves :)
__________________
Los mejores juegos de PC gratis en ******

Etiquetas: join, relacion, 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:43.