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

[SOLUCIONADO] Duda en consulta N-M

Estas en el tema de Duda en consulta N-M en el foro de Mysql en Foros del Web. Hola Me ha surgido una duda con una consulta SQL. Tengo la tabla películas y la tabla actores, con sus identificadores y sus campos correspondientes. ...
  #1 (permalink)  
Antiguo 17/06/2013, 03:58
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Duda en consulta N-M

Hola

Me ha surgido una duda con una consulta SQL.

Tengo la tabla películas y la tabla actores, con sus identificadores y sus campos correspondientes.

También tengo la tabla película-actor, donde hay dos campos idpelicula e idactor, para relacionar las películas con los actores.

Hasta aquí todo bien, lo que ahora quisiera hacer una consulta para saber todas las películas en las que han participado el actor con identificador 2, el actor con identificador 20 y el actor con identificador 30, es decir un and de actores, las películas donde han participado esos 3 actores en particular

Pudiendo ampliar esta consulta, con más actores, no solo 3.

De mientras se me ocurre hacer un group by por idpelicula y un group_concat con los id de actores y luego no se como hacer esa comparación, para que se cumpla un numero determinado.

Otra manera que se me ocurre es "instanciar" varias tablas película-actor, para comparar cada campo...

Que manera se os ocurre.

Muchas gracias
  #2 (permalink)  
Antiguo 17/06/2013, 04:10
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 20 años, 8 meses
Puntos: 3
Respuesta: Duda en consulta N-M

Cita:
Hasta aquí todo bien
Cierto, hasta ahí todo bien.

Cita:
lo que ahora quisiera hacer una consulta para saber todas las películas en las que han participado el actor con identificador 2, el actor con identificador 20 y el actor con identificador 30, es decir un and de actores,
Esto ya está mal.

en el where no tienes que poner idactor=20 && idactor=2. Bueno poder puedes pero para eso en sql existe la claúsula in
Código:
... where idactor in (2,20)
Ahí puedes meter lo que tu quieras, dos actores o setenta o incluso una select que devuelva un ocnjunto indeterminado de claves
Código:
... where idactor in (
   select idactor from X where condicion
   )
Sabiendo eso con coger la tabla correcta y sacar los camoos correctos el where lo puedes hacer de esta manera
  #3 (permalink)  
Antiguo 17/06/2013, 04:15
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Duda en consulta N-M

Muchas gracias por el comentario, pero esto seria una OR que el actor sea el 2 o el 20, y no es lo que necesito.

Yo lo que necesitaría es que se cumplan los dos, es decir que la película este hecha por el actor 2 y el 20. (Pudiendo añadir más)
  #4 (permalink)  
Antiguo 17/06/2013, 04:27
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Duda en consulta N-M

Añado una posible solución, a ver si así se entiende el problema, pero busco alguna otra manera más fácil
Código MySQL:
Ver original
  1. SELECT p.*
  2. FROM peliculas AS p, peliculas-actores AS rel, peliculas-actores AS rel2
  3. WHERE p.id = rel.idpelicula AND rel.codactor = 2 AND p.id = rel2.idpelicula AND rel2.codactor = 20;
Gracias!

Última edición por gnzsoloyo; 17/06/2013 a las 06:36
  #5 (permalink)  
Antiguo 17/06/2013, 05:05
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 20 años, 8 meses
Puntos: 3
Respuesta: Duda en consulta N-M

osea que tu tienes en tu tabla de peliculas los campos pelicula e idactor y claro, como una pelicula tiene muchos actores lo que tienes es la misma pelicula muchas veces. Una por cada actor. En ta tabla actores un registro por cada actor/pelicula osea que el mismo actor está indeterminadas veces.

y además quieres que eso se repita indeterminadas veces, no el actor 2 y el 20 sino el 200 y el 2000 si se tercia.

Pues eso es un algoritmo recursivo.

Última edición por Gedeon; 17/06/2013 a las 05:13
  #6 (permalink)  
Antiguo 17/06/2013, 05:27
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Duda en consulta N-M

No no...

Tengo tres tablas

Peliculas = La película solo está una vez, es decir es única, no hay una pelicula por cada actor
Actores = Cada actor solo esta una vez, = que el caso anterior
peliculas-actores = La relación de peliculas-actores, para que no pase eso que comentas, de tener que repetir n_veces una pelicula o n_veces un actor.


Quizá te liaste con la SQL que puse, en la sql para hacer lo que quiero uso dos veces la misma tabla peliculas-actores, para poder obtener las películas que cumplan que los dos actores hayan participado, si quisiera 3 o 4 actores concretos, pues añadiría otra vez la tabla, así funciona, pero buscaba algo más sencillo/optimo

Fíjate que la tabla actores no aparece en la consulta, ya que para simplificar, ya dije unos actores determinados de los que ya se su id.

Gracias
  #7 (permalink)  
Antiguo 17/06/2013, 06:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda en consulta N-M

Probemos algo simple:
Código MySQL:
Ver original
  1. SELECT p.*
  2. FROM peliculas p
  3.     INNER JOIN peliculas_actores rel ON p.id = rel.idpelicula
  4. WHERE rel.codactor IN(2, 20, 30)
  5. HAVING COUNT(P.id) = 3;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 17/06/2013, 07:07
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Duda en consulta N-M

Ole!

Algo así buscaba!!

Muchas gracias a los dos!

Por cierto gnzsoloyo, alguna otra manera de hacerlo, por curiosidad y por conocer alguna otra idea buena como esta.

Muchas gracias!
  #9 (permalink)  
Antiguo 17/06/2013, 07:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda en consulta N-M

Hay diferentes maneras de hacerlo, pero algunas dependen de las condiciones que se busquen y las relaciones adicionales que se requieran.
En una consulta simple como esa, con eso alcanza.
__________________
¿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 17/06/2013, 07:32
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Duda en consulta N-M

Alguna recomendación de info a buscar o libro donde expliquen esto?

Gracias de nuevo
  #11 (permalink)  
Antiguo 17/06/2013, 07:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda en consulta N-M

No hay muchas explicaciones... Es experiencia, porque cada base de datos es diferente, cada sistema tiene requerimientos distintos, y la forma de consulta dependerá de lo que cada aplicación necesite.
No hay reglas absolutas. Hay que analizar lo que se necesita caso por caso. Si los parámetros fuesen otros, la consulta propuesta hubiese sido completamente distinta.
__________________
¿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 17/06/2013, 07:58
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Duda en consulta N-M

Ok, gracias!

Etiquetas: campo, sql, tabla
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 07:51.