PHP - ayuda con sentencia sql para chart js

 
Vista:
sin imagen de perfil

ayuda con sentencia sql para chart js

Publicado por alejandro (15 intervenciones) el 29/09/2017 21:23:49
tengo un pequeño problema creando una sentencia sql para mi proyeto de encuestas online. Les explico más detalles:

Tengo una tabla "Preguntas" que esta relacionada con una tabla "Respuesta". Lo que necesito es graficar la respuestas de una encuesta en un gráfico de barra 100% apilada. La encuesta trabaja con la escala de likert (1 = no aplica, 2 = muy en desacuerdo , 3 = en desacuerdo , 4 = en acuerdo, 5 = muy en acuerdo). El problema que tengo es que no me ha resultado la sentencia SQL correcta para que en cada una de la columnas del gráfico muestre la cantidad de respuestas de cada tipo por cada una de las preguntas.

Para que se entienda mejor, por ejemplo considerando 20 encuestas respondidas, en la columna de la Pregunta 1 se deberían graficar 6(no aplica), 0(muy en desacuerdo), 1(en desacuerdo), 7(en acuerdo) y 6(muy en acuerdo).

grafico.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
require_once('../../../php/conexion.php');
?>
<!doctype html>
<html>
 
<head>
    <title>Stacked Bar Chart</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.bundle.js"></script>
    <script src="../../utils.js"></script>
    <style>
    canvas {
        -moz-user-select: none;
        -webkit-user-select: none;
        -ms-user-select: none;
    }
    </style>
</head>
 
<body>
    <div style="width: 75%">
        <canvas id="canvas"></canvas>
    </div>
    <script>
        var barChartData = {
            labels: [
        <?php
		$sql = "SELECT * FROM preguntas";
		$result = mysqli_query($connection,$sql);
		while ($registros = mysqli_fetch_array($result))
		{
        ?>
            '<?php echo $registros["id_pregunta"] ?>',
        <?php
		}
		?>
 
            ],
            datasets: [{
 
                label: 'No aplica',
                backgroundColor: window.chartColors.red,
                data:
                  <?php
				$sql = "SELECT * FROM respuesta WHERE respuesta.tipo_respuesta='2'";
				$result = mysqli_query($connection,$sql);
				?>
                [<?php while ($registros = mysqli_fetch_array($result)){ ?><?php echo $registros["tipo_respuesta"] ?>,
                 <?php }?>]
 
            }, {
                label: 'Muy en desacuerdo',
                backgroundColor: window.chartColors.blue,
                data:
                  <?php
				$sql = "SELECT * FROM respuesta WHERE respuesta.tipo_respuesta='2'";
				$result = mysqli_query($connection,$sql);
				?>
                [<?php while ($registros = mysqli_fetch_array($result)){ ?><?php echo $registros["tipo_respuesta"] ?>,
                 <?php }?>]
            }, {
                label: 'en desacuerdo',
                backgroundColor: window.chartColors.green,
                data:
                  <?php
				$sql = "SELECT * FROM respuesta WHERE respuesta.tipo_respuesta='3'";
				$result = mysqli_query($connection,$sql);
				?>
                [<?php while ($registros = mysqli_fetch_array($result)){ ?><?php echo $registros["tipo_respuesta"] ?>,
                <?php }?>]
            }, {
                label: 'En acuerdo',
                backgroundColor: window.chartColors.yellow,
                data:
                  <?php
				$sql = "SELECT * FROM respuesta WHERE respuesta.tipo_respuesta='4'";
				$result = mysqli_query($connection,$sql);
				?>
                [<?php while ($registros = mysqli_fetch_array($result)){ ?><?php echo $registros["tipo_respuesta"] ?>,
                <?php }?>]
            },{
                label: 'Muy en acuerdo',
                backgroundColor: window.chartColors.orange,
                data:
                  <?php
				$sql = "SELECT * FROM respuesta WHERE respuesta.tipo_respuesta='5'";
				$result = mysqli_query($connection,$sql);
				?>
                [<?php while ($registros = mysqli_fetch_array($result)){ ?><?php echo $registros["tipo_respuesta"] ?>,
                <?php }?>]
            } ]
 
        };
        window.onload = function() {
            var ctx = document.getElementById("canvas").getContext("2d");
            window.myBar = new Chart(ctx, {
                type: 'bar',
                data: barChartData,
                options: {
                    title:{
                        display:true,
                        text:"Chart.js Bar Chart - Stacked"
                    },
                    tooltips: {
                        mode: 'index',
                        intersect: false
                    },
                    responsive: true,
                    scales: {
                        xAxes: [{
                            stacked: true,
                        }],
                        yAxes: [{
                            stacked: true
                        }]
                    }
                }
            });
        };
 
    </script>
</body>
 
</html>

adjuntare la tabla repuesta

tabla


cualquier orientación o ayuda seria de gran ayuda de antemano gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ayuda con sentencia sql para chart js

Publicado por Yamil Bracho (888 intervenciones) el 29/09/2017 21:44:09
El query de No Aplica es igual al de 'Muy en desacuerdo'
No seria mas facil si haces
1
2
3
SELECT id_pregunta, tipo_respuesta, count(*)
FROM respuesta
GROUP BY id_pregunta, tipo_respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
sin imagen de perfil

ayuda con sentencia sql para chart js

Publicado por alejandro (15 intervenciones) el 02/10/2017 23:49:48
Hola me servio mucho
pero he intentado que arrogue los valores cero igual
esto me arroga la sentencia que puse
1
2
3
SELECT id_pregunta_r, tipo_respuesta, count(*)
FROM respuesta WHERE tipo_respuesta = 1
GROUP BY id_pregunta_r, tipo_respuesta
consulta

para poder graficar necesito que muestre los 0 igual ejemplo
id_pregunta_r tipo_respuesta count
1 1 2
2 1 0
3 1 3
4 1 0
5 1 0
6 1 0
7 1 0
8 1 1

use having y todo no me arroga el valor 0
cualquier orientacion sera de gran ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ayuda con sentencia sql para chart js

Publicado por Yamil Bracho (888 intervenciones) el 03/10/2017 00:06:18
En los datos de las respuestas no tienes registros si la pregunta no tiene respuestas (Tiene sentido, solo se registras las respuestas que s erespondieron :-). Para que sumarizes las preguntas que no tienen respuesta deberas hacer un left join de Preguntas a Respuestas por el campo id_pregunta.
Quizas algo como :
1
2
3
4
SELECT p.id_pregunta, r.tipo_respuesta, r.count(*)
FROM pregunta p
inner join respuesta r on p.id_pregunta = r.id_pregunta
GROUP BY p.id_pregunta, r.tipo_respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ayuda con sentencia sql para chart js

Publicado por alejandro (15 intervenciones) el 03/10/2017 21:27:53
aplique lo que dijiste me tira error el r,count(*)

le quite el r y me arrojo la misma tabla sin lo valores 0.

ya he intentado de muchas maneras y no me resulta :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar