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

consulta query. Es posible?

Estas en el tema de consulta query. Es posible? en el foro de Mysql en Foros del Web. Hola tengo una duda con un query y no se si se podra hacer. la tabla esta formada asi formulario1 campo Tipo ---------------------------------------------------------------- idForm INT ...
  #1 (permalink)  
Antiguo 08/05/2009, 17:25
 
Fecha de Ingreso: mayo-2003
Ubicación: Tauranga, NZ.
Mensajes: 89
Antigüedad: 20 años, 11 meses
Puntos: 0
consulta query. Es posible?

Hola tengo una duda con un query y no se si se podra hacer.

la tabla esta formada asi

formulario1
campo Tipo
----------------------------------------------------------------
idForm INT PK
preg1 ENUM (muy bueno, bueno, regular, malo)
preg2 ENUM (muy bueno, bueno, regular, malo)
preg3 ENUM (muy bueno, bueno, regular, malo)
preg4 ENUM (muy bueno, bueno, regular, malo)
----------------------------------------------------------------
por cada campo va a tener un valor (muy bueno, bueno, regular, malo)

Quiero contar por cada registro la cantidad de "muy bueno, bueno, regular, malo" por registro. Y me de un resultado similar a este:

Preg1
my bueno:3
bueno:2
regular:1
malo:1
-------------------------
Preg2
my bueno:2
bueno:3
regular:1
malo:1
------------------------
...

Se puede hacer con un query o tengo que pasar todo a un array y hacerlo con php?
Y si despues quiero agregar el promedio por pregunta?
Gracias
  #2 (permalink)  
Antiguo 09/05/2009, 04:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consulta query. Es posible?

SELECT idForm, respuesta, COUNT( respuesta )
FROM `respuesta`
GROUP BY idForm, respuesta ORDER BY idForm

No entiendo bien lo del promedio. ¿A qué te refieres exactamente? ¿ al porcentaje de, por ejemplo, regular para una pregunta en concreto o para todas? ¿Quieres hacerlo necesariamente en una única consulta?
  #3 (permalink)  
Antiguo 09/05/2009, 10:17
 
Fecha de Ingreso: mayo-2003
Ubicación: Tauranga, NZ.
Mensajes: 89
Antigüedad: 20 años, 11 meses
Puntos: 0
Respuesta: consulta query. Es posible?

claro, el porcentaje seria por cada pregunta, para despues con eso hacer algun grafico.
Gracias por la respuesta!
  #4 (permalink)  
Antiguo 09/05/2009, 11:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consulta query. Es posible?

a ver si esto, gulp,

Código sql:
Ver original
  1. SELECT t1.idForm, t1.respuesta, t1.res, t2.tot, CONCAT( ROUND( (
  2. (
  3. t1.res *100
  4. ) / t2.tot ) , 2 ) , '%'
  5. )porcentaje
  6. FROM (
  7.  
  8. SELECT idForm, respuesta, COUNT( respuesta ) res
  9. FROM `respuesta`
  10. GROUP BY idForm, respuesta
  11. ORDER BY idForm
  12. )t1
  13. INNER JOIN (
  14.  
  15. SELECT idForm, COUNT( * ) tot
  16. FROM respuesta
  17. GROUP BY idForm
  18. )t2 ON t1.idForm = t2.idForm

EDITO para decirte que yo, en tu caso, en lugar un campo de tipo ENUM, usaría una tabla con los valores y relacionada. Si me preguntas por qué, te diré que por al menos un par de razones, la primera de portabilidad (si quieres trabajar con otra base de datos), y segunda porque me ofrece la posibilidad de controlar mejor los datos, aunque sea algo menos rápida. Me explico: si quieres puntuar con 5 puntos muy buena, con 4 buena, con 3 regular, etc., tendrías que usar condicionales con enum y más sintaxis sql que si tuvieras una tabla en la que pondrías un campo puntuacion. Si un día quisieras cambiar la puntuación, no tendrías que cambiar la sintaxis sql, sino simplemente el valor en la tabla. Es verdad que, a diferencia de ahora, tendrás que relacionar todo con esa otra tabla, aunque eso no resultará nada difícil.

Última edición por jurena; 10/05/2009 a las 04:28
  #5 (permalink)  
Antiguo 11/05/2009, 21:30
 
Fecha de Ingreso: mayo-2003
Ubicación: Tauranga, NZ.
Mensajes: 89
Antigüedad: 20 años, 11 meses
Puntos: 0
Respuesta: consulta query. Es posible?

Gracias por la resupesta. Es verdad, la mejor forma de hacerlo es creando otra tabla y relacionarla. Asi es como se enseña y debería ser.
Ya lo cambie. Pero despues surge la duda. Para que encontes cren un tipo de dato como el ENUM...pero eso ya es otro tema
Al final he solucionado el tema desde php. La consulta SQL la hice simple, y luego desde php, voy sacando promedios de cada registro y luego saco el todal. No se si será la mejor forma de hacerlo, pero funcionó

Código PHP:
<? 

    $conexion 
conectar(); 

    
$sql'SELECT preg1, preg2, preg3, preg4, preg5, preg6, preg7, preg8, preg9, preg10, preg11 FROM formtipo1';
    
$result mysql_query($sql) OR die (mysql_error());
    
$registros mysql_num_rows($result); 
    
$promTotal=0;
    if(
$result){    
                 while(
$reg mysql_fetch_array($result)){
                    
$total0;
                    
$promedio=0;
                                    
                    echo 
"<tr>";
                    echo 
"<td>" $reg['preg1'] . "</td>\n ";  $total$total $reg['preg1'];
                    echo 
"<td>" $reg['preg2'] . "</td>\n "$total$total $reg['preg2'];
                    echo 
"<td>" $reg['preg3'] . "</td>\n "$total$total $reg['preg3'];
                    echo 
"<td>" $reg['preg4'] . "</td>\n "$total$total $reg['preg4'];
                    echo 
"<td>" $reg['preg5'] . "</td>\n "$total$total $reg['preg5'];
                    echo 
"<td>" $reg['preg6'] . "</td>\n "$total$total $reg['preg6'];
                    echo 
"<td>" $reg['preg7'] . "</td>\n "$total$total $reg['preg7'];
                    echo 
"<td>" $reg['preg8'] . "</td>\n "$total$total $reg['preg8'];
                    echo 
"<td>" $reg['preg9'] . "</td>\n "$total$total $reg['preg9'];
                    echo 
"<td>" $reg['preg10'] . "</td>\n "$total$total $reg['preg10'];
                    echo 
"<td>" $reg['preg11'] . "</td>\n "$total$total $reg['preg11'];
                    
$promedio $total/11;             
                    echo 
"<td>"  .round($promedio,2)."</td>\n ";
                    echo 
"</tr>";
                    
$promTotal$promTotal $promedio;
                    }
                    
                    
$promTotal$promTotal$registros ;
                     
                }
                else {echo 
'Error con consulta: ' .$sql;
                } 
mysql_close ($conexion);                
?>
Código PHP:
//luego muestro el promedio total, redondeando el resultado
<? echo "Total<br>" .round($promTotal,2)." ";  ?>
Saludos
  #6 (permalink)  
Antiguo 12/05/2009, 00:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consulta query. Es posible?

gulp,
para que cree un campo como el ENUM (me refiero al aspecto: desplegable) tienes que hacer un selector en html que tome los datos de esa nueva tabla, es decir, un selector dinámico. Es tan sencillo como eso.
Respecto a tu decisión, yo tampoco sé si será la más correcta, aunque probablemente sí, sobre todo si hay muchos datos, pues una consulta sobre dos subconsultas relacionadas y con función de agregado siempre será más lenta, sobre todo cuando haya muchos datos. Pero este es el foro de base de datos en el que, además, no debemos escribir sintaxis de programación; de ahí la respuesta en MySQL; y si la has probado debería funcionar.
saludos y suerte.
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 19:08.