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

Relacion entre 3 tablas

Estas en el tema de Relacion entre 3 tablas en el foro de Mysql en Foros del Web. Hola amigos vengo con una consulta que no puedo resolver, el caso es que tengo 3 tablas: 1. pagina 2. tipo_donacion 3. categorias_personas La tabla ...
  #1 (permalink)  
Antiguo 28/04/2017, 12:21
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 2 meses
Puntos: 4
Relacion entre 3 tablas

Hola amigos vengo con una consulta que no puedo resolver, el caso es que tengo 3 tablas:

1. pagina
2. tipo_donacion
3. categorias_personas

La tabla pagina tiene un FK del id donacion y categoria tiene otra FK tambien del id donacion, cuando hago la consulta para que me muestre me los duplica.

Código MySQL:
Ver original
  1. SELECT P.id, P.titulo, TD.nombre, CP.nombre AS nombrecat FROM pagina P
  2. INNER JOIN tipo_donacion TD ON P.tipo_donacion = TD.id
  3. INNER JOIN categorias_personas CP ON TD.id = CP.id_tipo_donacion

Necesito saber como resolver esto, o tal vez mi diseño este mal, agradesco su ayuda he interes.
  #2 (permalink)  
Antiguo 28/04/2017, 12:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Relacion entre 3 tablas

Haz el join y empieza primero con 2 tablas, si te duplica los datos entonces fijate porque otro campo puedes discriminar la consulta.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 28/04/2017, 12:58
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Relacion entre 3 tablas

Gracias por responder, con 2 campos si me sale la consulta pero necesito de la otra para saber en q categoria esta y es ahi donde me lo duplica, mira te explico, lleno la tabla pagina donde selecciono en un combobox que tipo de donacion es y si es de un tipo especifico se abrira otro combobox con la categoria de esa donacion.

Pdta.: Las categorias_personas las lleno en un form seleccionando a q tipo de donacion pertenece.
  #4 (permalink)  
Antiguo 28/04/2017, 13:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Relacion entre 3 tablas

po un ejemplo de tus datos y asi te podria ayudar mejor
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 28/04/2017, 13:34
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Relacion entre 3 tablas

Tabla pagina:
id, titulo, descripcion, id_tipo dinacion(FK)

Tabla tipo_donacion:
id, titulo, descripcion

Tabla categorias_peronas
id, nombre, descripcion, id_tipo_donacion(FK)

  #6 (permalink)  
Antiguo 28/04/2017, 14:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Relacion entre 3 tablas

No sabes que son datos de ejemplo?

Tabla 1
dato1 dato2 dato3

tabla 2
dato1 dato2 dato3

tabla 3
dato1 dato2 dato3

Necesito

tabla1 dato1 tabla2 dato.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 28/04/2017, 14:23
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Relacion entre 3 tablas

Si, te haba puesto una imagen, pero aca va.

Tabla pagina:

id, titulo, tipo_donacion(FK)
1, Niño Juancito, 2
2, Madre Anastacia, 2

Tabla tipo_donación:
id, nombre
1, proyectos
2, personas

Tabla categorias_personas:
id, nombre, id_tipo_donacion(FK)
1, niños, 2
2, madres, 2
  #8 (permalink)  
Antiguo 28/04/2017, 15:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Relacion entre 3 tablas

No entiendo tus datos, que es pagina? y porque pagina y categoria personas tiene un id_tipo_donacion? que es una donacion?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 28/04/2017, 15:21
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Relacion entre 3 tablas

haber, pagina es cuando creo una pagina algo asi como un cms ahi hay mas datos pero solo he puesto los basicos que permite hacer la relacion, cuando creo una pagina escojo si va a llevar un imput para donar por eso habra un combobox donde selecciono el tipo de donacion o no, si escojo personas me despliega otro combobox de las categorias personas, ahi estan madres, niños y ancianos.

El tema es que cuando creo esas categorias en otro formulario, tengo que escoger a que tipo de donacion pertenece, ejemplo madres o niños pertenece a tipo de donacion personas, espero haberme explicado bien
  #10 (permalink)  
Antiguo 29/04/2017, 11:00
 
Fecha de Ingreso: noviembre-2014
Ubicación: peru-lima
Mensajes: 32
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: Relacion entre 3 tablas

Ojala se entienda.
la tabla pagina es la organización.
la tabla categoría_personas es lo que trata la organización(Niño Juancito categoría niños)
la tabla tipo_donación es para que se va a donar (si es proyectos para hacer mantenimiento al edificio y si es persona para alimentación)

pagina
id primary key
titulo varchar(30)
idDona foreign key
idCatg foreign key


tipo_donacion
idDona primary key
descripcion varchar(30)

categoria_persona
idCatg primary key
descripcion varchar(30)
  #11 (permalink)  
Antiguo 29/04/2017, 12:39
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: Relacion entre 3 tablas

bueno he creado una tabla "pagina_persona" donde va el id de la pagina y el id de la categoria, he ingreso los datos en las dos tablas pagina y pagina_persona, y haciendo esta consulta

Código MySQL:
Ver original
  1. SELECT P.id, P.titulo, CP.nombre AS nombrecat FROM pagina P
  2. INNER JOIN categorias_personas CP ON P.tipo_donacion = CP.id_tipo_donacion
  3. INNER JOIN pagina_persona PP ON CP.id = PP.idcatpersona AND P.id = PP.idpagina;

me trae lo que quiero, no se si es lo más optimo pero con esto por haora me resulve el problema si alguien tien alguna mejor idea les gradecria.
  #12 (permalink)  
Antiguo 08/05/2017, 10:41
 
Fecha de Ingreso: noviembre-2014
Ubicación: peru-lima
Mensajes: 32
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: Relacion entre 3 tablas

create table tipo_donacion(
idDona int primary key,
descripcion varchar(30)
);

create table categoria_persona(
idCatg int primary key,
descripcion varchar(30)
);

create table pagina(
id int primary key,
titulo varchar(30),
idDona int,
foreign key (idDona) references tipo_donacion(idDona),
idCatg int,
foreign key (idCatg) references categoria_persona(idCatg)
);


insert into tipo_donacion values
(1,'Proyectos'),
(2,'Personas');

insert into categoria_persona values
(1,'Niños'),
(2,'Madres');

insert into pagina values
(1,'Niño Juancito',2,2),
(2,'Madre Anastacia',2,2);

SELECT P.id, P.titulo, TD.descripcion, CP.descripcion AS nombrecat FROM pagina P
INNER JOIN tipo_donacion TD ON P.idDona = TD.idDona
INNER JOIN categoria_persona CP ON CP.idCatg = p.idCatg;


... manda una imagen de tus resultados
  #13 (permalink)  
Antiguo 09/05/2017, 15:31
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 117
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Relacion entre 3 tablas

Disculpa no te faltara algún distintivo WHERE, también ver como reaciona con los right JOIN, left, union

SELECT gasolina . * , usuario.nombre
FROM gasolina
LEFT JOIN usuario ON gasolina.idusuario = usuario.idusuario
WHERE gasolina.autorizaidusuario IS NOT NULL

Etiquetas: relacion, select, tabla, 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 10:16.