Resultados 1 al 4 de 4

Ayuda con Mysql

  1. #1 Ayuda con Mysql 
    Medio
    Fecha de ingreso
    Feb 2009
    Mensajes
    65
    Descargas
    14
    Uploads
    0
    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:

    Código:
    SELECT tabla1.opcion, COUNT(*) as "Pregunta 1"
    FROM tabla1, tabla2
    WHERE tabla1.code = tabla2.respuesta1 AND tabla1.qid =1
    GROUP BY answer
    y
    Código:
    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:

    Código:
    Opción          |Pregunta1
    No importante   |  2
    Poco importante |  1
    y

    Código:
    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í

    Código:
    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?
    Citar  
     

  2. #2  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    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:

    Código:
    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:

    Código:
    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.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  3. #3  
    Medio
    Fecha de ingreso
    Feb 2009
    Mensajes
    65
    Descargas
    14
    Uploads
    0
    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í:
    Código:
    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?
    Citar  
     

  4. #4  
    Medio
    Fecha de ingreso
    Feb 2009
    Mensajes
    65
    Descargas
    14
    Uploads
    0
    Buscando por ahí encontré esta solución, la pongo en caso de que alguien la necesite.

    Código:
    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.
    Citar  
     

Temas similares

  1. [Ayuda] Problema Mysql JAVA
    Por Sedruol en el foro BASES DE DATOS
    Respuestas: 3
    Último mensaje: 07-03-2012, 01:15
  2. MySql
    Por Mastrufedo en el foro BASES DE DATOS
    Respuestas: 4
    Último mensaje: 14-06-2009, 05:28
  3. MySQL y PHP
    Por Deskicio en el foro PROGRAMACION WEB
    Respuestas: 6
    Último mensaje: 11-02-2008, 18:43
  4. Ayuda con MYSQL por favor
    Por juancer1123 en el foro PROGRAMACION WEB
    Respuestas: 4
    Último mensaje: 13-08-2007, 20:35
  5. PHP/MySQL?
    Por <PICCOLO> en el foro GENERAL
    Respuestas: 10
    Último mensaje: 18-10-2002, 04:41

Marcadores

Marcadores