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

acceder a campos de una tabla con llave foranea(FK)

Estas en el tema de acceder a campos de una tabla con llave foranea(FK) en el foro de Bases de Datos General en Foros del Web. Hola a todos!!! tengo una duda en MySQL. como podria seleccionar los campos de una llave foranea en una tabla especifica como esta: Código: CREATE ...
  #1 (permalink)  
Antiguo 31/01/2011, 09:11
 
Fecha de Ingreso: mayo-2007
Mensajes: 47
Antigüedad: 17 años
Puntos: 0
Pregunta acceder a campos de una tabla con llave foranea(FK)

Hola a todos!!! tengo una duda en MySQL. como podria seleccionar los campos de una llave foranea en una tabla especifica como esta:


Código:
CREATE TABLE `auto` (
	`id_auto` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
	`id_marca` INT(10) UNSIGNED NOT NULL,
	`id_modelo` INT(10) UNSIGNED NOT NULL,
	`id_pago` INT(10) UNSIGNED NULL DEFAULT NULL,
	`id_tipo` INT(10) UNSIGNED NOT NULL,
	`id_foto` INT(10) UNSIGNED NOT NULL,
	`motor` VARCHAR(10) NOT NULL,
	`caja` ENUM('manual','automatico','secuencial') NOT NULL,
	`combustible` ENUM('nafta','diesel','flex','gas') NOT NULL,
	`precio` INT(20) NOT NULL,
	`desc` VARCHAR(300) NOT NULL,
	`color` VARCHAR(20) NOT NULL,
	`equipamiento` VARCHAR(300) NOT NULL,
	PRIMARY KEY (`id_auto`),
	INDEX `marca_id` (`id_marca`),
	INDEX `FK_auto_pago` (`id_pago`),
	INDEX `FK_auto_tipo_auto` (`id_tipo`),
	INDEX `FK_auto_fotos` (`id_foto`),
	INDEX `FK_auto_modelo` (`id_modelo`),
	CONSTRAINT `FK_auto_fotos` FOREIGN KEY (`id_foto`) REFERENCES `fotos` (`id_foto`),
	CONSTRAINT `FK_auto_marca` FOREIGN KEY (`id_marca`) REFERENCES `marca` (`id_marca`) ON DELETE CASCADE,
	CONSTRAINT `FK_auto_modelo` FOREIGN KEY (`id_modelo`) REFERENCES `modelo` (`id_modelo`) ON DELETE CASCADE,
	CONSTRAINT `FK_auto_pago` FOREIGN KEY (`id_pago`) REFERENCES `pago` (`id_pago`),
	CONSTRAINT `FK_auto_tipo_auto` FOREIGN KEY (`id_tipo`) REFERENCES `tipo_auto` (`id_tipo`)
)
Quisiera seleccionar campos de la tabla fotos que tiene id_fotos como (FK) en la tabla autos, pero necesito hacer un JOIN para hacer comparaciones con una tabla llamada modelo.
mi query es el siguiente:

Código:
SELECT * FROM auto INNER JOIN modelo ON auto.id_modelo = modelo.id_modelo WHERE id_marca='$idmarca'
Con esto solo puedo seleccionar id_fotos(FK) que se encuentra en la tabla autos y quisiera seleccionar no ese campo sino otro campo, que creo que se podria acceder con id_fotos(FK).

Como podria hacer esto? si podrian ayudarmmme.
  #2 (permalink)  
Antiguo 31/01/2011, 11:52
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: acceder a campos de una tabla con llave foranea(FK)

Tu mismo te respondes como se podria hacer:

SELECT * FROM auto INNER JOIN modelo ON auto.id_modelo = modelo.id_modelo
inner join auto_fotos on auto.id_foto=auto_fotos.id_foto
WHERE id_marca='$idmarca'


Saludos!
  #3 (permalink)  
Antiguo 31/01/2011, 12:19
 
Fecha de Ingreso: mayo-2007
Mensajes: 47
Antigüedad: 17 años
Puntos: 0
Respuesta: acceder a campos de una tabla con llave foranea(FK)

Gracias Libras !!!
En realidad me quedaria de esta manera:

$query= "
SELECT * FROM auto INNER JOIN modelo ON auto.id_modelo = modelo.id_modelo
INNER JOIN fotos ON auto.id_foto=fotos.id_foto
WHERE id_marca='$idmarca'
";


La solucion entonces con otro INNER JOIN, pense que se podria acceder directamente a todos los datos teniendo un (FK) pero veo que no es posible.

Gracias...!!!
  #4 (permalink)  
Antiguo 31/01/2011, 13:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: acceder a campos de una tabla con llave foranea(FK)

Directamente como tal no, la razon de ser de una FK es que no se puedan insertar datos si no existen en la tabla a relacionar, en este caso no podrias insertar una id_foto en autos que no existiera en fotos.

Saludos!

Etiquetas: acceder, campos, llave, 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 16:23.