Foros del Web » Programando para Internet » PHP »

Consulta de resumen por campos php mysql

Estas en el tema de Consulta de resumen por campos php mysql en el foro de PHP en Foros del Web. Cordial saludo Necesito la ayuda de alguien, estoy creando un sistema de gestion escolar y tengo una consulta de logros que vienen de una vista ...
  #1 (permalink)  
Antiguo 10/11/2014, 16:11
 
Fecha de Ingreso: agosto-2014
Ubicación: barranquilla
Mensajes: 93
Antigüedad: 9 años, 8 meses
Puntos: 0
Busqueda Consulta de resumen por campos php mysql

Cordial saludo

Necesito la ayuda de alguien, estoy creando un sistema de gestion escolar y tengo una consulta de logros que vienen de una vista que obtiene los campos grado, asignatura, desempeno (ñ omito la ñ en el campo) la ejecucion me da el resultado de la siguiente imagen.




lo que en realidad quiero es agrupar la informacion en grados y asignaturas algo asi.



Tengo el siguiente código, que genera una consulta de manera normal, me he rompido la cabeza pero no he encontrado una solución.


<?php
include('conexion.php');
session_start();
$listado= mysql_query("select * from vistalogro where iddocente='".$_SESSION['identidad']."'",$cn);
?>
<script type="text/javascript" language="javascript" src="js/jstabla.js"></script>
<center><label class="titulo_tabla">LISTA DE LOGROS POR ASIGNATURAS</label></center>
<table cellpadding="0" cellspacing="0" border="0" class="display" id="tabla">
<thead>
<tr>
<th>Grado</th>
<th>Asignatura</th>
<th>Desempe&ntilde;o</th>
<th>Logro</th>

</tr>
</thead>
<tfoot>
<tr>
<th></th>
<th></th>
</tr>
</tfoot>
<tbody>
<?php

while($reg=mysql_fetch_array($listado)){
echo '<tr>';
echo '<td style="width:70px;">'.$reg['grado'].'</td>';
echo '<td style="width:70px;">'.$reg['nomasignatura'].'</td>';
echo '<td style="width:70px;">'.$reg['desempeno'].'</td>';
echo '<td style="width:70px;">'.$reg['logro'].'</td>';
?>

<?php


}

?>
<tbody>

</table>

</center>
</fieldset>
</div>
</body>
  #2 (permalink)  
Antiguo 10/11/2014, 17:21
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Consulta de resumen por campos php mysql

La tabla que pretendes es algo compleja de crear, pero es perfectamente posible.

Primero, debes agrupar la información, si no lo haces mediante un arreglo, al menos debes ordenarla correctamente, para que tus filas de resultados estén en orden consecutivo y no haya saltos.

Luego, para crear la tabla, antes de hacer la primer columna (td) debes saber cuántos registros hay; en tu ejemplo, para la columna "primero", debe tener una propiedad rowspan con valor de 8 (4 de pre matemáticas y 4 de estadísticas).

así que se empieza por algo así:
Código HTML:
Ver original
  1. <tr>
  2.      <td rowspan="8">primero<td>
luego, debes saber cuántas filas están en el dato de tu segunda columna (pre matemáticas), es decir 4, con lo que queda:

Código HTML:
Ver original
  1. <tr>
  2.      <td rowspan="8">primero<td>
  3.      <td rowspan="4">pre matemáticas<td>
y luego ver si hay más agrupaciones, en tu ejemplo ya no hay, con lo que queda:

Código HTML:
Ver original
  1. <tr>
  2.      <td rowspan="8">primero<td>
  3.      <td rowspan="4">pre matemáticas<td>
  4.      <td>Bajo<td>
  5.      <td>aaaaaaa<td>
luego completar las filas siguientes:

Código HTML:
Ver original
  1. <tr>
  2.      <td rowspan="4">pre matemáticas</td>
  3.      <td>Bajo</td>
  4.      <td>aaaaaaa</td>
  5. </tr>
  6. <tr>
  7.      <td>basico</td>
  8.      <td>cccc</td>
  9. </tr>
  10. <tr>
  11.      <td>Superior</td>
  12.      <td>zzzz</td>
  13. </tr>
  14. <tr>
  15.      <td>alto</td>
  16.      <td>wwww</td>
  17. </tr><!-- cerramos grupo pre matemáticas>
  18.  
  19. <tr>
  20.     <td rowspan="4">Estadísticas</td>
  21.     <td>Bajo</td>
  22.     <td>aaaaaaa</td>
  23. </tr>
  24. <tr>
  25.     <td>basico</td>
  26.     <td>cccc</td>
  27. </tr>
  28. <tr>
  29.     <td>Superior</td>
  30.     <td>zzzz</td>
  31. </tr>
  32. <tr>
  33.     <td>alto</td>
  34.     <td>wwww</td>
  35. </tr><!-- cerramos grupoEstadísticas y con ello el grupo "primero">

Esto yo suelo implementarlo agrupando los datos con arreglos asociativos, luego mediante un algoritmo recursivo, "dibujo" la tabla contando cuántas filas puede llegar a haber dentro de cada celda para calcular su rowspan antes de dibujarla, de esta forma, puede haber cualquier cantidad de filas dentro de cualquier celda de cualquier columna.
  #3 (permalink)  
Antiguo 10/11/2014, 19:07
 
Fecha de Ingreso: agosto-2014
Ubicación: barranquilla
Mensajes: 93
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Consulta de resumen por campos php mysql

Gracias amigo por responder y la dedicación de tu tiempo, me saco de dudas tu explicación con respecto a las filas con la propiedad rowspan, pero me asalta otra duda como hago para establecer las cantidades de filas en las columnas que quiero agrupar ya que puede ser variante según los registros contenidos en la tabla, me puedes dar una ayuda con eso, el inicio de lo demás lo continuo yo. Gracias amigo
  #4 (permalink)  
Antiguo 11/11/2014, 17:56
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Consulta de resumen por campos php mysql

La forma que yo utilizo es agrupar los datos en un arreglo, por ejemplo, para tu caso, podría ser

Código PHP:
Ver original
  1. while($fila=mysql_fetch_assoc($result))
  2.     $arreglo[$fila['grado']][$fila['asignatura']][$fila['desempeno']][]=$fila['logro'];
Esto creará un arreglo asociativo, que puedes recorrer con foreach, puede ser recursivo si tu arreglo no tiene una cantidad de niveles definido, o si sabes que sólo hay 4 niveles (en tu ejemplo) puedes anidar 4 foreach

Código PHP:
Ver original
  1. foreach($arreglo as $grado =>$arreglo_n2){//recorremos y obtenemos la primer columna (grado)
  2.       $nfilas=cuenta_filas($arreglo_n2);//función para contar elementos de un arreglo.
  3.       echo '<tr><td rowspan="'.$nfilas.'">'.$grado.'</td>';
  4.       foreach($arreglo_n2 as $asignatura =>$arreglo_n3)
  5.       -
  6.       -
  7.       -//demás código.
  8. }

la función para contar elementos o filas del arreglo sí debe ser recursiva, se trata de profundizar en el arreglo hasta que se llegue a los nodos finales

Código PHP:
Ver original
  1. function cuenta_filas($arreglo){
  2.    if(!is_array($arreglo))//si llegue al nodo (no es un arreglo)
  3.         return 1;
  4.    $suma=0;
  5.    foreach($arreglo as $clave =>$valor)
  6.        if(is_array($valor))
  7.             $suma+=cuenta_fila($arreglo);
  8.    return $suma;
  9. }
  #5 (permalink)  
Antiguo 11/11/2014, 21:52
 
Fecha de Ingreso: agosto-2014
Ubicación: barranquilla
Mensajes: 93
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Consulta de resumen por campos php mysql

Gracias por tu respuesta amigo, pero me genera un erro en la función, he realizado los pasos como lo sugeriste



Ayudame porfavor...!

Etiquetas: mysql
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 07:18.