Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/04/2013, 06:46
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consultas múltiples a múltiples tablas ¿Cómo lo hago?

Si se puede hacer con una sola consulta usando join como te ha dicho... pero antes tienes un error de diseño en la tabla directores....

La relación pelicula-director es n:m puesto que una pelicula puede tener varios directores y un director puede haber dirigido varias peliculas... Si quieres te concedo que hagas la reduccion de que una pelicula siempre tendrá un solo director... aún suponiendo esto sigues con un error de diseño

Si la relacion es N:M necesitas tres tablas

Peliculas
idPelicula
titulo
...

RelPeliculasDirectores
idPelicula
idDirector

Directores
idDirector
nombre
...

esta estructura permite que una pelicula tenga n directores y que un director haya dirigido m peliculas minimizando el espacio de almacenamiento de datos.

Si la relación es 1:N


Necesitas dos tablas como ya tienes pero con los identificadores de relacion donde toca

Peliculas
idPelicula
titulo
idDirector
...

Directores
idDirector
Nombre
...

esto permite saber el director de cada pelicula, sin tener que duplicar directores en su tabla. Tu tenias el idPelicula en la tabla directores lo que te obligaba a repetyir los datos del director para cada pelicula que haya dirigido.


La misma explicación se podria aplicar a la relacion entre peliculas y generos... pero vamos a suponer que con genero y subgenero tienes bastante.


Código MySQL:
Ver original
  1. SELECT * FROM ((peliculas p INNER JOIN directores d ON p.idDirector=d.idDirector)
  2.                           INNER JOIN
  3.                                   ((fichas f INNER JOIN generos gg ON f.genero_ficha=gg.id_genero)
  4.                                                  INNER JOIN generos sg ON f.subgenero_ficha=sg.id_genero)
  5.                                 ON p.idPelicula=f.id_ficha_pelicula)
  6.                           INNER JOIN videos v ON p.idPelicula=v.id_video_pelicula
  7. WHERE p.url_pelicula = '$url_pelicula';

Aquí la solución para el caso en que solo tengas un director por pelicula....

Esto te dara todos los campos te todas las tablas... no te gustará el resultado por que te va a repetir los datos de una pelicula tantas veces como videos tengas...

Yo te aconsejo que trates el resultado en la programacion externa para mostrar loque quieres... directemente en mysql .... deberías usar group concat sobre los videos ... pero no es estandar y a mi no me gusta.

Usa LEFT JOIN si alguno de los campos no tiene contenido....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 25/04/2013 a las 06:53