PDA

Ver la versión completa : Ayuda con Mysql



desevensa
07-03-2012, 23:33
Hola a todos.

Estoy haciendo unas consultas en mysql que hace rato no lo trabajaba y no he podido resolver una consulta en particular. En concreto, tengo las siguientes consultas que me retornan los resultados de mas abajo:


SELECT tabla1.opcion, COUNT(*) as "Pregunta 1"
FROM tabla1, tabla2
WHERE tabla1.code = tabla2.respuesta1 AND tabla1.qid =1
GROUP BY answer
y

tabla1.opcion, COUNT(*) as "Pregunta 2"
FROM tabla1, tabla2
WHERE tabla1.code = tabla2.respuesta2 AND tabla1.qid =1
GROUP BY answer

Con esto obtengo estas dos tablas:



Opción |Pregunta1
No importante | 2
Poco importante | 1

y



Opción |Pregunta2
Muy importante | 2
No importante | 1

Como pueden ver la consulta retorna el número de veces que se escogió determinada opción, hasta ahí bien, lo que quiero hacer es una consulta en la que se unan estas dos consultas en una sola para que quede así


Opción |Pregunta1 |Pregunta 2
No importante | 2 | 2
Poco importante | 1 | 0
Muy importante | 0 | 1

Mis disculpas por la forma tan elemental en la que muestro los resultados pero no encontré la forma de ponerla al menos en HTML

Ya con la consulta resuelta puedo exportarla fácilmente para hacer el resto.

¿Alguien me puede ayudar?

hystd
08-03-2012, 04:04
Lo que quieres hacer se llama "INNER JOIN", pero no me queda claro en tu ejemplo, y si yo lo he entendido bien, el resultado debería ser:


Opción |Pregunta1 |Pregunta 2
No importante | 2 | 1
Poco importante | 1 | 0
Muy importante | 0 | 2

En cualquier caso, si yo lo he entendido bien, puesto que se trata de hacerlo con tablas auxiliares (resultado de consultas SELECT), lo más fácil es que lo especifiques manualmente:



SELECT tabla1.opcion, COUNT(tabla2.respuesta1) as "Pregunta 1", COUNT(tabla2.respuesta2) as "Pregunta 2"
FROM tabla1, tabla2
WHERE (tabla1.code = tabla2.respuesta1) OR (tabla1.code = tabla2.respuesta2)
AND tabla1.qid =1
GROUP BY answer


Prueba eso y me comentas, porque si no es lo que quieres, entonces yo no me he enterado de nada.

Un saludo.

desevensa
12-03-2012, 00:20
Sí, la idea es obtener una tabla así pero he tenido complicaciones y al querer unir las tablas el resultado no es el esperado.

Explicando mejor en qué consiste lo que quiero hacer, la aplicación es una encuesta, tiene varias preguntas en las que las posibles respuestas son "No importante", "Poco importante", "Importante" y "Muy importante". Cada respuesta se almacena respectivamente con los números 1, 2, 3 y 4 (los resultados están en una tabla y el texto de las opciones están en otra).

Con la consulta que puse obtengo los resultados correctos, el problema es que esa consulta no me genera resultados de cero en caso de que nadie escoja alguna opción.

Estuve ensayando con una función llamada "COALESCE" pero solo funciona si en la tabla hay un NULL explícito y desafortunadamente ese cruce de datos no producirá ninguno.

Veo que antes de hacer un JOIN entre las tablas debo poder obtener una tabla así:


opción |Pregunta
no importante | 1
poco importante | 0
importante | 2
muy importante | 3


Entonces mi pregunta cambia ¿cómo modifico la pregunta para que me genere un resultado de cero en caso de no tener coincidencias?

desevensa
12-03-2012, 06:10
Buscando por ahí encontré esta solución, la pongo en caso de que alguien la necesite.



SELECT
SUM(IF(tabla2.respuesta1 = 1, 1, 0)) "No importante",
SUM(IF(tabla2.respuesta1 = 2, 1, 0)) "Poco importante",
SUM(IF(tabla2.respuesta1 = 3, 1, 0)) "Importante",
SUM(IF(tabla2.respuesta1 = 4, 1, 0)) "Muy importante"
FROM tabla2


Lo malo es que debo hacer un UNION con cada pregunta así que lo mejor que se me ocurre es hacer un FOR o algo por el estilo para ahorrar en código.