Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/06/2012, 05:05
Avatar de oNefl0w189
oNefl0w189
 
Fecha de Ingreso: abril-2010
Ubicación: Valladolid
Mensajes: 117
Antigüedad: 14 años
Puntos: 4
Respuesta: Relacionar datos / Capturar cambio.

Hola @gldelossantos de primeras muchas gracias.

Ya mas o menos he encontrado la manera.. pero ahora tengo problemas para mostrarlo como yo quiero.

Tengo esta base de datos:


Tengo que obtener la MEDIA_TOTAL de cada pregunta (de cada ámbito), es decir la media total para pregunta1, media total para pregunta2 etc..

La obtengo así:

Código PHP:
Ver original
  1. // CONTAMOS EL NÚMERO DE REGISTROS PARA DIVIDIR.
  2.             $sql4 = ("SELECT COUNT(*) FROM encuestas WHERE numeroPregunta = '".$datos2['numeroPregunta']."' AND codAmbito = '".$datos2['codAmbito']."'");
  3.             $resultados4 = mysql_query($sql4);
  4.             while($datos4 = mysql_fetch_array($resultados4)) {
  5.                 $cuenta = $datos4[0];
  6.             }
  7.            
  8.             // SELECIONAMOS Y SUMAMOS LA MEDIA CUANDO SEA ESE NUMERO DE PREGUNTA EN ESE AMBITO.
  9.             $sql5 = ("SELECT SUM(media) as media FROM encuestas WHERE numeroPregunta = '".$datos2['numeroPregunta']."' AND codAmbito = '".$datos2['codAmbito']."'");
  10.             $resultados5 = mysql_query($sql5);
  11.             while($datos5 = mysql_fetch_array($resultados5)){
  12.                     $mediatotal = $datos5[0]/$cuenta;
  13.             }

(recordemos que la media son, la suma de los datos, dividido entre el numero de datos que hay)

es decir, con la primera consulta:

SELECT COUNT(*) FROM encuestas WHERE numeroPregunta = '".$datos2['numeroPregunta']."' AND codAmbito = '".$datos2['codAmbito']."'

Cuento cuantos datos me saca para saber entre cuanto tengo que dividir luego la media, filtrando para que sea ESA PREGUNTA en ESE ÁMBITO.


con la segunda consulta:

SELECT SUM(media) as media FROM encuestas WHERE numeroPregunta = '".$datos2['numeroPregunta']."' AND codAmbito = '".$datos2['codAmbito']."'

cojo todas las medias de ESA PREGUNTA y de ESE ÁMBITO y las sumo.

Después hago la operación para que me divida la media:
$mediatotal = $datos5[0]/$cuenta;

Así obtengo la media_total de la Pregunta1 ambito1, pregunta2 ambito1, etcetc..


El problema es que ahora tengo que mostrar las medias y me gustaría que saliese en esta tabla



Despues de las filas de pregunta1 una fila que fuese, Media total pregunta 1, despues de todas las preguntas 2 una fila que fuese, Media total pregunta 2,
y así sucesivamente.

El caso es que voy imprimiendo fila a fila y nose como hacerlo..

el código que tengo ahora es:

Código PHP:
Ver original
  1. <?php
  2.  include('conex.php');
  3.  
  4.     // SELECCIONAMOS EL ÁMBITO.
  5.     $ambitos = ("SELECT ambitos.codAmbito, ambitos.descripAmbito FROM ambitos ORDER BY codAmbito");
  6.     $resuambitos = mysql_query($ambitos);
  7.  
  8.     echo "<table border=\"1\"><tr><td> Datos Encuesta </td> <td> Medias Totales </td></tr><tr><td>";
  9.    
  10.     // MIENTRAS HAYA ÁMBITO IMPRIME.
  11. while($datos = mysql_fetch_assoc($resuambitos)) {
  12.  
  13.     // IMPRIMIMOS EL TÍTULO Y ABRIMOS LA TABLA.
  14.     echo "<b>Ambito: </b>".$datos['descripAmbito'];
  15.     echo "<table border=\"1\"><tr><td><b>Centro</b></td><td><b>Numero Pregunta</b></td><td><b>Evaluador1</b></td><td><b>Evaluador2</b></td><td><b>Evaluador3</b></td><td><b>opinPos</b></td><td><b>opinNeg</b></td><td><b>Media</b></td><td><b>Ponderacion</b></td></tr>";
  16.    
  17.     // SELECIONAMOS TODOS LOS DATOS DE ENCUESTAS CUANDO TENGAN ESE CÓDIGO DE AMBITO.
  18.     $encuestas = ("SELECT descripAmbito, descripCentro, encuestas.codAmbito, encuestas.codCentro, numeroPregunta, evaluador1, evaluador2, evaluador3, opinPos, opinNeg, media
  19.     FROM ambitos, centros, encuestas
  20.     WHERE ambitos.codAmbito = '".$datos['codAmbito']."'
  21.     AND ambitos.codAmbito = encuestas.codAmbito
  22.     AND centros.codCentro = encuestas.codCentro
  23.     ORDER BY encuestas.numeroPregunta");
  24.     $resuencuestas = mysql_query($encuestas);
  25.        
  26.         // MIENTRAS  HAYA RESULTADOS IMPRIME.
  27.         while($datos2 = mysql_fetch_assoc($resuencuestas)) {
  28.                    
  29.             // SELECIONAMOS LOS PORCENTAJES PARA CALCULAR LA PONDERACIÓN.
  30.             $porcentajes = ("SELECT porcentaje FROM ponderaciones WHERE codCentro = '".$datos2['codCentro']."'");
  31.             $resuporcentajes = mysql_query($porcentajes);
  32.            
  33.             // MIENTRAS HAYA DATOS EN PONDERACIONES IMPRIME.
  34.             while($datos3 = mysql_fetch_assoc($resuporcentajes)){
  35.                 $ponderacion = round($datos2['media'] * $datos3['porcentaje']);
  36.             }
  37.                    
  38.  
  39.         // RELLENAMOS LA TABLA CON LOS DATOS.
  40.         echo "<tr>";
  41.         echo "<td>".$datos2['descripCentro']." </td>";
  42.         echo "<td>".$datos2['numeroPregunta']." </td>";
  43.         echo "<td>".$datos2['evaluador1']." </td>";
  44.         echo "<td>".$datos2['evaluador2']." </td>";
  45.         echo "<td>".$datos2['evaluador3']." </td>";
  46.         echo "<td>".$datos2['opinPos']." </td>";
  47.         echo "<td>".$datos2['opinNeg']." </td>";
  48.         echo "<td>".$datos2['media']."</td>";
  49.         echo "<td>".$ponderacion."</td>";
  50.         echo "</tr>";
  51.    
  52.    
  53.             // CONTAMOS EL NÚMERO DE REGISTROS PARA DIVIDIR.
  54.             $sql4 = ("SELECT COUNT(*) FROM encuestas WHERE numeroPregunta = '".$datos2['numeroPregunta']."' AND codAmbito = '".$datos2['codAmbito']."'");
  55.             $resultados4 = mysql_query($sql4);
  56.             while($datos4 = mysql_fetch_array($resultados4)) {
  57.                 $cuenta = $datos4[0];
  58.             }
  59.            
  60.             // SELECIONAMOS Y SUMAMOS LA MEDIA CUANDO SEA ESE NUMERO DE PREGUNTA EN ESE AMBITO.
  61.             $sql5 = ("SELECT SUM(media) as media FROM encuestas WHERE numeroPregunta = '".$datos2['numeroPregunta']."' AND codAmbito = '".$datos2['codAmbito']."'");
  62.             $resultados5 = mysql_query($sql5);
  63.             while($datos5 = mysql_fetch_array($resultados5)){
  64.                     $mediatotal = $datos5[0]/$cuenta;
  65.             }
  66.    
  67.         }
  68.        
  69.         // CERRAMOS LA TABLA.
  70.         echo "</table>";
  71.         echo "<br>";
  72.  
  73. }
  74.  
  75. // IMPRIMIMOS LAS MEDIAS TOTALES.
  76. echo "</td><td> aqui va la tabla de las medias totales</td>";
  77. echo "</tr></table>";
  78. ?>


Me serviría mostrar despues de cada numero de preguntas (es decir, despues de las 4 pregunta1, luego despues de las 4 pregunta2) mostrar una fila que fuese, Media Total Pregunta 1 : 'x' .

o tambien,

mostrar esos datos para que me muestre una tabla por cada ámbito con 1 fila por cada pregunta en la que muestre el número de pregunta y la media total.



Si no entiendes especifícame mejor que partes son las que no entiendes a ver como te podría explicar mejor, ok?
__________________
Nunca dijeron que la vida sería fácil, sólo prometieron que valdría la pena vivirla.

Dar las gracias y añadir Karma, no cuesta nada, ¿Que menos si te ayudan? :)