Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/08/2013, 06:12
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: 17 años, 3 meses
Puntos: 2658
Respuesta: Consulta de varios id a una misma tabla

El problema tiene dos partes.
Por un lado, el diseño que elegiste es defectuoso, mal planteado. Tienes una relación 1:N entre encuesta y preguntas, y N:N entre las preguntas y las respuestas. Para hacerlo así, las preguntas deberían haberse creado como tabla relacional independiente, lo que te permitiría haer un simple iNNER JOIN para obtener las respetas.

Por otro lado, el esquema que elegiste exige que hagas un INNER JOIN por cada campo relacionado, obviamente usando alias, ya que cada INNER JOIN sólo puede obtener el vínculo entre un único campo ID de pregunta, con un único ID de respuesta al mismo tiempo.
Código MySQL:
Ver original
  1. FROM encuesta e
  2.     INNER JOIN condicional c1 ON e.pregunta2_id = c1.id_condicional
  3.     INNER JOIN condicional c2 ON e.pregunta3_id = c2.id_condicional
  4.     INNER JOIN condicional c3 ON e.pregunta4_id = c3.id_condicional
  5.     INNER JOIN condicional c4 ON e.pregunta5_id = c4.id_condicional
  6.     ...
Esto también implica que necesitas invocar uno a uno los nombres en el SELECT para no terminar trayendo basura que no necesitarás:
Código MySQL:
Ver original
  1. SELECT e.id_encuesta,
  2.              c1.id_condicional, c1.nombre_condicional,
  3.              c2.id_condicional, c2.nombre_condicional,
  4.              c3.id_condicional, c3.nombre_condicional,
  5.              c4.id_condicional, c4.nombre_condicional,
  6.              ...
  7. FROM encuesta e
  8.     INNER JOIN condicional c1 ON e.pregunta2_id = c1.id_condicional
  9.     INNER JOIN condicional c2 ON e.pregunta3_id = c2.id_condicional
  10.     INNER JOIN condicional c3 ON e.pregunta4_id = c3.id_condicional
  11.     INNER JOIN condicional c4 ON e.pregunta5_id = c4.id_condicional
  12.     ...

De todos modos, con un sistema de encuesta cuyas respuestas sólo tiene dos opciones posibles, es más simple usar un campo ENUM para contener tanto el valor como la respuesta dada.
En ese sentido, lo estás complicando demasiado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)