Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/12/2014, 10:26
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Consulta SQL con varios referencias a otra tabla.

En realidad, estimado, tienes dos problemas...
Tu consulta, sobre la base de esa tabla, no es imposible, pero si es complicada e ineficiente. Necesitas invocar la tabla que contiene los nombres cuatro veces, una por cada uno de los ID de cada uno de los campos. Eso hace que la consulta requiera hacer cuatro veces los JOIN, con el consiguiente exceso en el acceso a tablas e índices, y eso es lo que la hace muy ineficiente.
Código MySQL:
Ver original
  1.     cs.name,
  2.     cd.name dj1,
  3.     cd.name dj2,
  4.     cd.name dj3,
  5.     cd.name dj4,
  6.     TIME,
  7.     cs.points
  8. FROM channelsongs cs
  9.     INNER JOIN channeldjs cd1 ON cd1.id=cs.dj1
  10.     INNER JOIN channeldjs cd2 ON cd2.id=cs.dj2
  11.     INNER JOIN channeldjs cd3 ON cd3.id=cs.dj3
  12.     INNER JOIN channeldjs cd4 ON cd4.id=cs.dj4
  13. GROUP BY cs.name
Pero el primer problema, y central, es que esa tabla de canales está muy mal diseñada. Esa tabla expresa una relación N:M entre dos entidades: Canales y DJs, y toda relación de ese tipo genera una tabla relaciona, que tu estás diseñando muy mal.
La tabla debería tener un registro por cada uno de los DJs asociados a un canal dado, más un discriminante de orden. Un diseño correcto así podría darte la oportunidad de incluir más de cuatro DJs sin necesidad de reformar las tabla y el JOIN sólo requeriría hacer un único INNER JOIN... y no cuatro.
Adicionalmente, el mostrar los cuatro en un único registro pasaría a ser un tema de programación y liberarías a la base de una tarea ineficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)