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

[SOLUCIONADO] Es posible colocar 0 en una consulta si falta un valor?

Estas en el tema de Es posible colocar 0 en una consulta si falta un valor? en el foro de Mysql en Foros del Web. Hola Amigos como están, quiero hacerles una consulta a ver si es posible, estoy realizando un sistema de evaluación, mis preguntas son de selección única ...
  #1 (permalink)  
Antiguo 04/04/2013, 09:42
 
Fecha de Ingreso: marzo-2007
Mensajes: 59
Antigüedad: 17 años, 8 meses
Puntos: 1
Es posible colocar 0 en una consulta si falta un valor?

Hola Amigos como están, quiero hacerles una consulta a ver si es posible, estoy realizando un sistema de evaluación, mis preguntas son de selección única entre 4 valores. en la tabla ya tengo almacenado y contabilizado cuantas veces respondieron 1,2,3,4, el problema es si por ejemplo para una pregunta todos los participantes dejan de responder una o varias opciones es decir del universo de participantes nadie respondió la opción 4, Puedo llenar eso con 0. Les muestro a continuación como es mi consulta y como arroja los resultados. Gracias.

Mi tabla temporal
Código MySQL:
Ver original
  1. $tabla (
  2.                           `idpregunta` int(11),
  3.                           `respuesta` int(11),
  4.                           `totalRespuesta` int(11),
  5.                           `nsec` int(11),
  6.                           `grupo` int(11),
  7.                           `subgrupo` int(11),
  8.                           `grup` varchar(50),
  9.                           `sub` varchar(50))

Consulta
Código MySQL:
Ver original
  1. SELECT idpregunta, respuesta, sum(totalRespuesta) as suma, nsec, grupo, subgrupo, grup, sub FROM $tabla group by sub, respuesta  order by grupo, subgrupo, respuesta

[URL=http://imageshack.us/photo/my-images/829/query2r.jpg/]

Como verán en la imagen en columna "resp" siempre debería tener 1,2,3,4 1,2,3,4
Pero me está saltando las opciones que nadie respondió, Incluso trate haciéndolo a nivel programático, pero cree tantas reglas que luego ni me pareció confiable ni exacto.


Existe manera de hacer esto en Mysql o sigo intentándolo por php, Gracias
  #2 (permalink)  
Antiguo 04/04/2013, 12:45
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Es posible colocar 0 en una consulta si falta un valor?

Hola danikene:

Tengo problemas para visualizar tu imágen, No sé si es problema con la URL o si aplicaron alguna restricción en la empresa donde trabajo .

Podrías poner los datos originales de tu tabla??? y a partir de esos datos, decirnos qué es lo que esperas obtener como salida??? Si entendí correctamente el problema se me ocurren varias alternativas, pero me gustaría tener todo el contexto antes de aventurarme a darte una respuesta.

Saludos
Leo.
  #3 (permalink)  
Antiguo 04/04/2013, 13:53
 
Fecha de Ingreso: marzo-2007
Mensajes: 59
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Es posible colocar 0 en una consulta si falta un valor?

Hola Leo, Gracias por tu ayuda, creo que debes tener una restricción en la oficina, por que coloque tanto la imagen como el enlace y al parecer ser visualizan bien. Pero lo importante, te voy a colocar parte de la data de la tabla para que la veas. Tuve que crearla físicamente por que era temporal y luego exportarla. Tal como lo pongo en la pregunta, fíjate en la segunda columna "respuesta", Donde los valores deberían de estar en 1,2,3,4. En la columna "totalRespuesta" aparecen las veces que se respondio esa opciòn( debería aparecer 0 en la opción no respondida) manteniéndose igual el grupo y el subgrupo .

Agradecería cualquier ayuda que me puedas prestar.

Código MySQL:
Ver original
  1. INSERT INTO `survey` (`idpregunta`, `respuesta`, `totalRespuesta`, `nsec`, `grupo`, `subgrupo`, `grup`, `sub`) VALUES
  2. (1, 1, 8, 1, 1, 1, 'Efectividad', 'Enfoque'),
  3. (2, 2, 6, 2, 1, 1, 'Efectividad', 'Enfoque'),
  4. (2, 3, 2, 2, 1, 1, 'Efectividad', 'Enfoque'),
  5. (5, 1, 8, 5, 1, 2, 'Efectividad', 'Responsabilidad'),
  6. (5, 2, 7, 5, 1, 2, 'Efectividad', 'Responsabilidad'),
  7. (6, 4, 1, 6, 1, 2, 'Efectividad', 'Responsabilidad'),
  8. (9, 1, 5, 9, 1, 3, 'Efectividad', 'Involucramiento'),
  9. (9, 2, 10, 9, 1, 3, 'Efectividad', 'Involucramiento'),
  10. (23, 4, 1, 23, 1, 3, 'Efectividad', 'Involucramiento'),
  11. (11, 1, 4, 11, 1, 4, 'Efectividad', 'Consecuencia'),
  12. (11, 2, 12, 11, 1, 4, 'Efectividad', 'Consecuencia'),
  13. (15, 1, 2, 15, 2, 5, 'Confianza', 'Capaz'),
  14. (15, 2, 5, 15, 2, 5, 'Confianza', 'Capaz'),
  15. (24, 3, 1, 24, 2, 5, 'Confianza', 'Capaz'),
  16. (26, 1, 1, 26, 2, 6, 'Confianza', 'Creible'),
  17. (26, 2, 2, 26, 2, 6, 'Confianza', 'Creible'),
  18. (26, 4, 1, 26, 2, 6, 'Confianza', 'Creible'),
  19. (25, 1, 9, 25, 2, 7, 'Confianza', 'Conectado'),
  20. (25, 2, 11, 25, 2, 7, 'Confianza', 'Conectado'),
  21. (31, 1, 2, 31, 2, 8, 'Confianza', 'Consistente'),
  22. (31, 2, 5, 31, 2, 8, 'Confianza', 'Consistente'),
  23. (32, 4, 1, 32, 2, 8, 'Confianza', 'Consistente'),
  24. (16, 1, 4, 16, 2, 9, 'Confianza', 'Satisfacción'),
  25. (16, 2, 8, 16, 2, 9, 'Confianza', 'Satisfacción'),
  26. (17, 1, 25, 17, 3, 0, 'Modelaje', ''),
  27. (17, 2, 22, 17, 3, 0, 'Modelaje', ''),
  28. (17, 4, 5, 17, 3, 0, 'Modelaje', ''),
  29. (45, 1, 10, 45, 5, 12, 'Adecuación del Estilo', 'Persona a Persona'),
  30. (45, 2, 5, 45, 5, 12, 'Adecuación del Estilo', 'Persona a Persona'),
  31. (45, 4, 1, 45, 5, 12, 'Adecuación del Estilo', 'Persona a Persona'),
  32. (19, 1, 16, 19, 5, 13, 'Adecuación del Estilo', 'Equipo'),
  33. (19, 2, 9, 19, 5, 13, 'Adecuación del Estilo', 'Equipo'),
  34. (19, 3, 1, 19, 5, 13, 'Adecuación del Estilo', 'Equipo'),
  35. (20, 4, 2, 20, 5, 13, 'Adecuación del Estilo', 'Equipo'),
  36. (52, 1, 15, 52, 6, 14, 'Autoliderazgo', 'Autonomía'),
  37. (52, 2, 10, 52, 6, 14, 'Autoliderazgo', 'Autonomía'),
  38. (56, 3, 1, 56, 6, 14, 'Autoliderazgo', 'Autonomía'),
  39. (52, 4, 2, 52, 6, 14, 'Autoliderazgo', 'Autonomía'),
  40. (61, 1, 16, 61, 6, 15, 'Autoliderazgo', 'Fuentes de Influencia'),
  41. (61, 2, 7, 61, 6, 15, 'Autoliderazgo', 'Fuentes de Influencia'),
  42. (63, 4, 1, 63, 6, 15, 'Autoliderazgo', 'Fuentes de Influencia');
  #4 (permalink)  
Antiguo 04/04/2013, 14:31
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Es posible colocar 0 en una consulta si falta un valor?

Hola de nuevo danikene:

Efectivamente tengo restringido el acceso a sitios para subir imágenes, es por eso que no puedo visualizar el link .

No estoy seguro de si te entendí correctamente, pero creo que lo que pretendes es agregar los registros de las respuestas faltantes para cada pregunta, colocando un cero como total, si esto es correcto podrías hacerlo con el concepto de producto cartesiano, más o menos así:

Por un lado, debes crear una tabla que contenga todas las respuestas posibles (1, 2, 3, 4)

Código MySQL:
Ver original
  1. mysql> CREATE TABLE respuestas (respuesta INT);
  2. Query OK, 0 rows affected (0.08 sec)
  3.  
  4. mysql> INSERT INTO respuestas VALUES (1), (2), (3), (4);
  5. Query OK, 4 rows affected (0.05 sec)
  6. Records: 4  Duplicates: 0  Warnings: 0

Ahora, voy a hacer una subconsulta para obtener todas los grupos y subgrupos distintos, así:

Código MySQL:
Ver original
  1. mysql> SELECT DISTINCT grup, sub FROM survey;
  2. +-----------------------+-----------------------+
  3. | grup                  | sub                   |
  4. +-----------------------+-----------------------+
  5. | Efectividad           | Enfoque               |
  6. | Efectividad           | Responsabilidad       |
  7. | Efectividad           | Involucramiento       |
  8. | Efectividad           | Consecuencia          |
  9. | Confianza             | Capaz                 |
  10. | Confianza             | Creible               |
  11. | Confianza             | Conectado             |
  12. | Confianza             | Consistente           |
  13. | Confianza             | Satisfaccion          |
  14. | Modelaje              |                       |
  15. | Adecuacion del Estilo | Persona a Persona     |
  16. | Adecuacion del Estilo | Equipo                |
  17. | Autoliderazgo         | Autonomia             |
  18. | Autoliderazgo         | Fuentes de Influencia |
  19. +-----------------------+-----------------------+
  20. 14 rows in set (0.00 sec)

Haciendo un producto cartesiano entre estas dos tablas obtendrías TODAS LAS COMBINACIONES QUE NECESITAS, ES DECIR, CADA GRUPO Y SUBGRUPO CON SUS 4 RESPUESTAS. Con esta tabla resultante puedes hacer un LEFT JOIN sobre tu tabla de respuestas original, de tal manera que sólo aquellas preguntas que se respondieron tendrán un total, para el resto, simplemente utilizas función IFNULL para asignarle un 0. Sería más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT R.respuesta, T1.grup, T1.sub,
  2.     -> IFNULL(T2.totalRespuesta, 0) totalRespuesta
  3.     -> FROM respuestas R
  4.     -> INNER JOIN (SELECT DISTINCT grup, sub FROM survey) T1
  5.     -> LEFT JOIN survey T2 ON T1.grup = T2.grup AND
  6.     ->                        T1.sub = T2.sub AND
  7.     ->                        R.respuesta = T2.respuesta;
  8. +-----------+-----------------------+-----------------------+----------------+
  9. | respuesta | grup                  | sub                   | totalRespuesta |
  10. +-----------+-----------------------+-----------------------+----------------+
  11. |         1 | Efectividad           | Enfoque               |              8 |
  12. |         2 | Efectividad           | Enfoque               |              6 |
  13. |         3 | Efectividad           | Enfoque               |              2 |
  14. |         4 | Efectividad           | Enfoque               |              0 |
  15. |         1 | Efectividad           | Responsabilidad       |              8 |
  16. |         2 | Efectividad           | Responsabilidad       |              7 |
  17. |         3 | Efectividad           | Responsabilidad       |              0 |
  18. |         4 | Efectividad           | Responsabilidad       |              1 |
  19. |         1 | Efectividad           | Involucramiento       |              5 |
  20. |         2 | Efectividad           | Involucramiento       |             10 |
  21. |         3 | Efectividad           | Involucramiento       |              0 |
  22. |         4 | Efectividad           | Involucramiento       |              1 |
  23. |         1 | Efectividad           | Consecuencia          |              4 |
  24. |         2 | Efectividad           | Consecuencia          |             12 |
  25. |         3 | Efectividad           | Consecuencia          |              0 |
  26. |         4 | Efectividad           | Consecuencia          |              0 |
  27. |         1 | Confianza             | Capaz                 |              2 |
  28. |         2 | Confianza             | Capaz                 |              5 |
  29. |         3 | Confianza             | Capaz                 |              1 |
  30. |         4 | Confianza             | Capaz                 |              0 |
  31. |         1 | Confianza             | Creible               |              1 |
  32. |         2 | Confianza             | Creible               |              2 |
  33. |         3 | Confianza             | Creible               |              0 |
  34. |         4 | Confianza             | Creible               |              1 |
  35. |         1 | Confianza             | Conectado             |              9 |
  36. |         2 | Confianza             | Conectado             |             11 |
  37. |         3 | Confianza             | Conectado             |              0 |
  38. |         4 | Confianza             | Conectado             |              0 |
  39. |         1 | Confianza             | Consistente           |              2 |
  40. |         2 | Confianza             | Consistente           |              5 |
  41. |         3 | Confianza             | Consistente           |              0 |
  42. |         4 | Confianza             | Consistente           |              1 |
  43. |         1 | Confianza             | Satisfaccion          |              4 |
  44. |         2 | Confianza             | Satisfaccion          |              8 |
  45. |         3 | Confianza             | Satisfaccion          |              0 |
  46. |         4 | Confianza             | Satisfaccion          |              0 |
  47. |         1 | Modelaje              |                       |             25 |
  48. |         2 | Modelaje              |                       |             22 |
  49. |         3 | Modelaje              |                       |              0 |
  50. |         4 | Modelaje              |                       |              5 |
  51. |         1 | Adecuacion del Estilo | Persona a Persona     |             10 |
  52. |         2 | Adecuacion del Estilo | Persona a Persona     |              5 |
  53. |         3 | Adecuacion del Estilo | Persona a Persona     |              0 |
  54. |         4 | Adecuacion del Estilo | Persona a Persona     |              1 |
  55. |         1 | Adecuacion del Estilo | Equipo                |             16 |
  56. |         2 | Adecuacion del Estilo | Equipo                |              9 |
  57. |         3 | Adecuacion del Estilo | Equipo                |              1 |
  58. |         4 | Adecuacion del Estilo | Equipo                |              2 |
  59. |         1 | Autoliderazgo         | Autonomia             |             15 |
  60. |         2 | Autoliderazgo         | Autonomia             |             10 |
  61. |         3 | Autoliderazgo         | Autonomia             |              1 |
  62. |         4 | Autoliderazgo         | Autonomia             |              2 |
  63. |         1 | Autoliderazgo         | Fuentes de Influencia |             16 |
  64. |         2 | Autoliderazgo         | Fuentes de Influencia |              7 |
  65. |         3 | Autoliderazgo         | Fuentes de Influencia |              0 |
  66. |         4 | Autoliderazgo         | Fuentes de Influencia |              1 |
  67. +-----------+-----------------------+-----------------------+----------------+
  68. 56 rows in set (0.01 sec)

No estoy seguro de si esto es exactamente lo que estás buscando, si no es así dinos qué es lo que estás esperando como salida.

Saludos
Leo.
  #5 (permalink)  
Antiguo 04/04/2013, 14:45
 
Fecha de Ingreso: marzo-2007
Mensajes: 59
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Es posible colocar 0 en una consulta si falta un valor?

Excelente Leo eso es tal cual lo que necesitaba, lo que sucede es que para gráficar necesito tener todos las opciones de una pregunta aunque nadie las respondiera. Esto es genial, aun creo que me falta algo de camino! Gracias amigo
  #6 (permalink)  
Antiguo 15/04/2013, 09:05
 
Fecha de Ingreso: marzo-2007
Mensajes: 59
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Es posible colocar 0 en una consulta si falta un valor?

Leonardo Muy buen día, antes que nada quería disculparme contigo por 2 cosas, primero por no haber podido escribir antes pero estuve en cama, y segundo por no haber revisado el tema antes de cerrarlo y dar por solucionado mis lios existenciales :), nuevamente mil disculpas.

Dicho esto, amigo revisando detenidamente la consulta que me suministraste me arroja 90,339 filas cuando realmente la tabla de respuestas tiene 1471 repuestas y no me las esta agrupando. Estuve tratando de agrupar esta consulta de manera infructuosa.

Necesito una consulta que me ofrezca una respuesta tal como la que me muestras pero realmente pienso que lo estamos haciendo mal por que realmente los grupos y los subgrupos no corresponden con cada una de las preguntas.

Arriba coloqué una tabla temporal donde ya estan contabilizadas las respuestas pero me faltaria completar solamente con las preguntas nos respondidas. Ahora no se si olvidarme de esa tabla temporal y partir desde el inicio. Voy a colocar mis tablas para que puedas ver si mi analisis esta mal, por favor ayudame con esto please.

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `pregunta` (
  2.   `idpregunta` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `idencuesta` INT(11) NOT NULL,
  4.   `pregunta` text NOT NULL,
  5.   `p1` text NOT NULL,
  6.   `p2` text NOT NULL,
  7.   `p3` text NOT NULL,
  8.   `p4` text NOT NULL,
  9.   `grupo` tinyint(4) NOT NULL,
  10.   `subgrupo` tinyint(4) NOT NULL,
  11.   `activo` tinyint(4) NOT NULL,
  12.   PRIMARY KEY (`idpregunta`),
  13.   KEY `idpregunta` (`idpregunta`),
  14.   KEY `idencuesta` (`idencuesta`)
  15. );
  16.  
  17. CREATE TABLE IF NOT EXISTS `respuesta` (
  18.   `idrespuesta` INT(11) NOT NULL AUTO_INCREMENT,
  19.   `idcliente` INT(11) NOT NULL,
  20.   `idencuesta` INT(11) NOT NULL,
  21.   `idcolaborador` INT(11) NOT NULL,
  22.   `idpregunta` INT(11) NOT NULL,
  23.   `respuesta` INT(11) NOT NULL,
  24.   PRIMARY KEY (`idrespuesta`)
  25. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1472 ;
  26.  
  27. CREATE TABLE IF NOT EXISTS `grupo` (
  28.   `idgrupo` INT(6) NOT NULL AUTO_INCREMENT,
  29.   `grupo` VARCHAR(100) NOT NULL,
  30.   `activo` tinytext NOT NULL,
  31.   PRIMARY KEY (`idgrupo`),
  32.   KEY `idgrupo` (`idgrupo`)
  33. ) ;
  34.  
  35.  
  36.  
  37. INSERT INTO `grupo` (`idgrupo`, `grupo`, `activo`) VALUES
  38. (1, 'Efectividad', '1'),
  39. (2, 'Confianza', '1'),
  40. (3, 'Modelaje', '1'),
  41. (4, 'Comunicación', '1'),
  42. (5, 'Adecuación del Estilo', '1'),
  43. (6, 'Autoliderazgo', '1');
  44.  
  45.  
  46. CREATE TABLE IF NOT EXISTS `subgrupo` (
  47.   `idsub` INT(11) NOT NULL AUTO_INCREMENT,
  48.   `idgrupo` tinyint(4) NOT NULL,
  49.   `sub` VARCHAR(100) NOT NULL,
  50.   `activo` tinyint(4) NOT NULL,
  51.   PRIMARY KEY (`idsub`),
  52.   UNIQUE KEY `idsub` (`idsub`)
  53. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
  54.  
  55. --
  56. -- Volcado de datos para la tabla `subgrupo`
  57. --
  58.  
  59. INSERT INTO `subgrupo` (`idsub`, `idgrupo`, `sub`, `activo`) VALUES
  60. (1, 1, 'Enfoque', 1),
  61. (2, 1, 'Responsabilidad', 1),
  62. (3, 1, 'Involucramiento', 1),
  63. (4, 1, 'Consecuencia', 1),
  64. (5, 2, 'Capaz', 1),
  65. (6, 2, 'Creible', 1),
  66. (7, 2, 'Conectado', 1),
  67. (8, 2, 'Consistente', 1),
  68. (9, 2, 'Satisfacción', 1),
  69. (10, 3, 'Ninguno', 1),
  70. (11, 4, 'Ninguno', 1),
  71. (12, 5, 'Persona a Persona', 1),
  72. (13, 5, 'Equipo', 1),
  73. (14, 6, 'Autonomía', 1),
  74. (15, 6, 'Fuentes de Influencia', 1);

Leo Please indícame si debo abrir otro post, pero echame una manito con esto, Gracias
  #7 (permalink)  
Antiguo 15/04/2013, 10:33
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Es posible colocar 0 en una consulta si falta un valor?

Hola danikene:

Es mejor que abras un nuevo post y plantees otra vez de inicio cuál es el problema y qué es lo que quieres obtener como resultado final, partiendo de los datos que estás colocando de ejemplo

Saludos
Leo.

Etiquetas: falta, php, posible, select, sql, 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 12:56.