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

Consulta para encuesta

Estas en el tema de Consulta para encuesta en el foro de Mysql en Foros del Web. Buenas, estoy armando una encuesta... tengo una tabla encuesta y otra respuestas (q obviamente tiene un encuestaid) ... Cuando quiero mostrar la encuesta tengo una ...
  #1 (permalink)  
Antiguo 28/05/2009, 09:51
 
Fecha de Ingreso: diciembre-2008
Mensajes: 190
Antigüedad: 15 años, 4 meses
Puntos: 6
Consulta para encuesta

Buenas, estoy armando una encuesta... tengo una tabla encuesta y otra respuestas (q obviamente tiene un encuestaid) ...
Cuando quiero mostrar la encuesta tengo una duda en cuanto a la consulta.
Me gustaria levantar el nombre de la encuesta (en tabla encuesta), junto con todas las opciones q tiene esa encuesta pero en una sola consulta...
Probe varias formas, pero lo maximo q logre fue hacer una consulta con las opciones separadas por coma, otra columna con los ids de las opciones separados por coma .. y buen despues parseo ambos y las muestro , pero no me gusta mucho como queda...
La cantidad de opciones es variable...
Gracias de antemano.
Saludos
  #2 (permalink)  
Antiguo 28/05/2009, 10:33
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta para encuesta

Plantea tu pregunta con ejemplos y con las consultas que has probado y la forma como quieres que sean.
De esta forma será mas fácil que alguien te ayude.

un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 28/05/2009, 11:47
 
Fecha de Ingreso: diciembre-2008
Mensajes: 190
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Consulta para encuesta

Creo que esta mas que claro, pero bueno gracias por el consejo.
Simple
Tabla encuesta
id ---- titulo --------- -------estado
1 ----- Quien sera.. -------1
2 ------ Quien fue.. -------- 1

Tabla opciones
id ----idencuensta ----- respuesta
1 ----- 1 ----------------- pepe
2 ------- 1 ---------------- carlos
3 ------- 1 ------------------- nadie

Quiero traer la encuesta de id 1 con sus respectivas respuestas en una sola consulta...

Probe
SELECT e.id as ide, GROUP_CONCAT(r.respuesta SEPARATOR ',' ) as respuesta,
GROUP_CONCAT( r.id SEPARATOR ',' ) as idsopc
FROM encuestas e
LEFT JOIN respuestas r ON(r.encuestaid = e.id)
WHERE e.estado = 1
GROUP BY e.id
ORDER by e.fechapublicado desc limit 1
  #4 (permalink)  
Antiguo 28/05/2009, 12:05
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Consulta para encuesta

espero haber entendido bien lo que querias, prueba esto:

SELECT e.id, r.respuesta, r.id FROM encuestas e
LEFT JOIN respuestas r ON(r.encuestaid = e.id)
WHERE e.estado = 1

espero sea lo que necesites, sino comenta...
  #5 (permalink)  
Antiguo 28/05/2009, 12:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta para encuesta

Que tiene de malo tu consulta?
Lo único que no me cuadra es el limit 1 que pones al final.

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 01/06/2009, 10:40
 
Fecha de Ingreso: diciembre-2008
Mensajes: 190
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Consulta para encuesta

El limit 1 es porq quiero la ultima encuesta, y si le agrego por ej en el where e.id=max(e.id)
me tira un invalid use of group function.
De malo no tiene nada, pero luego debo parsear lo que arroja la consulta.. y no se si es mas optimo hacer las consultas por separado (de la encuesta y las respuestas) o hacerlo de esa manera...
  #7 (permalink)  
Antiguo 01/06/2009, 11:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta para encuesta

Me parece que tu sentencia está bien.

Ten en cuenta que si las hicieras por separado, tendrías que hacer dos viajes al servidor para efectuar una operación que puedes hacer en una sola consulta.
Sin embargo, puedes probar ambas opciones y comparar tiempos de respuesta. El limit 1 le da gran agilidad a la consulta, ya que toda el primer valor (que es el que necesitas) e ignora el resto de la sentencia.

En mi opinión, debes dejarla así. Puede haber otras opiniones.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 01/06/2009, 11:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta para encuesta

No entiendo por qué usas left join
SELECT e.id as ide, GROUP_CONCAT(r.respuesta SEPARATOR ',' ) as respuesta,
GROUP_CONCAT( r.id SEPARATOR ',' ) as idsopc
FROM encuestas e
INNER JOIN respuestas r ON(r.encuestaid = e.id)
WHERE e.estado = 1
GROUP BY e.id ORDER BY e.fechapublicado desc

Naturalmente, sólo te mostrará los datos de encuestas con datos, pero imagino que será lo que quieres, ¿o no, o las quieres todas, tengan o no datos?

El limit 1 te mostrará sólo una encuesta, la última en fecha que tiene datos,¿es eso lo que quieres? Si es así, está bien.

Última edición por jurena; 01/06/2009 a las 11:25
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 14:20.