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

Consulta de varios id a una misma tabla

Estas en el tema de Consulta de varios id a una misma tabla en el foro de Mysql en Foros del Web. Hola a todos tengo un problema con una consulta, sucede que estoy realizando una encuesta sencilla muchos campos son de "si" o "no", lo que ...
  #1 (permalink)  
Antiguo 19/08/2013, 05:53
 
Fecha de Ingreso: abril-2012
Ubicación: Colombia
Mensajes: 10
Antigüedad: 12 años
Puntos: 0
Consulta de varios id a una misma tabla

Hola a todos tengo un problema con una consulta, sucede que estoy realizando una encuesta sencilla muchos campos son de "si" o "no", lo que hice fue relacionar un id en la tabla encuesta que hace referencia a la respuesta seleccionada

Tengo una tabla encuesta:

id_encuesta (1)
pregunta2_id (2)
pregunta3_id (1)
pregunta4_id (2)
pregunta5_id (2)

Tabla condicional

id_condicional (1,2)
nombre_condicional (Si,No)

Pero cuando realizo la consulta: SELECT * FROM encuesta e, condicional c WHERE e.pregunta2_id=c.id_condicional AND e.pregunta3_id=c.id_condicional AND ...

Sabia que tengo algo mal igual ejecute la consulta y no me arroja resultados... ayuda por favor.
  #2 (permalink)  
Antiguo 19/08/2013, 06:12
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, 5 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)
  #3 (permalink)  
Antiguo 19/08/2013, 07:07
 
Fecha de Ingreso: abril-2012
Ubicación: Colombia
Mensajes: 10
Antigüedad: 12 años
Puntos: 0
Respuesta: Consulta de varios id a una misma tabla

Muchas gracias gnzsoloyo por la respuesta mira en si la idea era realizar la tabla independiente de N:N para resolver el asunto, ahora me surgen otro par de inquietudes porque me enviaron un formulario físico de la encuesta donde aparecen opciones de si o no, y porcentajes para otra ej: 1=0%-30%, 2=31%-70% y 3=71%-100%.

Adicionalmente me piden que el sistema pueda administrar esos parámetros adicionando mas opciones por lo que tendría que descartar el uso de ENUM según entiendo, hasta ahí todo correcto pero sucede que un par de preguntas pueden tener múltiple selección y estuve analizando realizar una tabla N:N por cada pregunta independiente de la que ya tenia sera esto optimo por otro lado voy a sacar una imagen de esquema E-R para que me puedas colaborar amigo la verdad estoy algo confundido en este proceso.
  #4 (permalink)  
Antiguo 19/08/2013, 07:13
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, 5 meses
Puntos: 2658
Respuesta: Consulta de varios id a una misma tabla

Efectivamente, si en una encuesta, una pregunta puede tener varias opciones relacionadas, el ENUM ya no es una opción.
Ahora bien, en el contexto que planteas, es decir, donde algunas preguntas pueden tener N respuestas y otras solo dos opciones SI/NO, se deben, por simplicidad de sistema, tratar siempre como relación N:N, donde dos de las respuestas tendrán cada una el valor SI y NO. No afecta al diseño y es requerimiento de sistema.
Lo complicado se produce cuando mencionas que lo que tienes ya es un porcentaje de respuestas dado, porque entonces el sistema no apunta a generar tales cálculos, sino que sólo registra algo que ya se ha consolidado (datos ya resumidos). Eso implica un modelo algo distinto, así que sería conveniente que aportaras el diagrama de tablas para entender lo que estás viendo un poco mejor.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/08/2013, 07:57
 
Fecha de Ingreso: abril-2012
Ubicación: Colombia
Mensajes: 10
Antigüedad: 12 años
Puntos: 0
Respuesta: Consulta de varios id a una misma tabla

Bueno logre asociar las tablas como me indicaste anteriormente, pero ahora me surge una duda tengo una tabla persona, que se relaciona por el parentesco con la identificación dentro de la misma tabla como consulto el nombre para cada persona y su parentesco si están en la misma tabla:

id
persona_identificacion
parentesco_identificacion

Código MySQL:
Ver original
  1. SELECT       p1.persona_nombre,
  2.              p2.persona_nombre
  3. FROM persona p
  4.     INNER JOIN persona p1 ON p1.persona_identificacion = p1.parentesco_identificacion
  5.     INNER JOIN persona p2 ON p2.persona_identificacion = p2.persona_identificacion

pero se me repiten los datos en el resultado.

Última edición por edos_gn; 19/08/2013 a las 14:37

Etiquetas: campo, select, 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 03:15.