Las tablas tienen la siguiente estructura:
alumnos -> id_alumno | id_curso | id_apoderado |
asignaturas_curso -> id_curso | id_asignatura |
asignaturas -> id_asigantura | nombre_asignatura |
calificaciones -> id_alumno | id_asignatura | id_semestre | n1 | n2 | n3 | n4 | ... | n15 |
Antes que todo, aclaro que he listado las notas definiendo una columna por cada una debido a que necesito controlar su posición en la tabla, pues a veces quedan notas sin poner y es necesario guardar su posición.
Pensando sólo en listar las asignaturas hago esto:
Código PHP :
<?php $consulta = " select alumnos.*, asignaturas_curso.*, asignaturas.* from alumnos inner join asignaturas_curso inner join asignaturas on alumnos.apoderado = '".($_SESSION['usuario'])."' where alumnos.id_curso = asignaturas_curso.id_curso and asignaturas_curso.id_asignatura = asignatura.id_asignatura"; $resultado = mysql_query($consulta) or die(mysql_error()); $num_filas = mysql_num_rows($resultado); while($datos = mysql_fetch_array($resultado)){ ?> <table><tr> <td><?php echo $datos['nombre_asignatura'] ?></td> ... <td></td> </tr></table> <?php } ?>Con eso así las asignaturas se listan bellamente en mi tabla. El problema me surge con las notas. Para extraer las notas agrego unas líneas a la consulta y modifico la tabla. Al final queda así:
Código PHP :
<?php $consulta = " select alumnos.*, asignaturas_curso.*, asignaturas.*, calificaciones.* from alumnos inner join asignaturas_curso inner join asignaturas inner join calificaciones on alumnos.id_apoderado = '".($_SESSION['usuario'])."' where alumnos.id_curso = asignaturas_curso.id_curso and asignaturas_curso.id_asignatura = asignaturas.id_asignatura and asignaturas_curso.id_asignatura = calificaciones.id_asignatura and calificaciones.id_alumno = alumnos.id_alumno and calificaciones.id_semestre = 1 "; $resultado = mysql_query($consulta) or die(mysql_error()); $num_filas = mysql_num_rows($resultado); while($datos = mysql_fetch_array($resultado)){ ?> <table><tr> <td><?php echo $datos['nombre_asignatura'] ?></td> <td><?php echo $datos['n1'] ?></td> <td><?php echo $datos['n2'] ?></td> ... <td><?php echo $datos['n15'] ?></td> <td><?php echo $promedio_asignatura ?></td> </tr></table> <?php } ?>Al hacer esto tengo varios problemas:
1. En la segunda tabla especifico que el semestre es = a 2 en la consulta. Como no hay notas no hay registros y entonces ya no me muestra la lista de las asignaturas. ¿Sería posible listar de todas formas las asignaturas aunque no tengan notas? Para esto se intenté una segunda consulta dentro del while sólo para rescatar las notas pero no me muestra las notas, así que lo descarté.
2. Para sumar las notas terminé haciéndolo así: $datos['n1']+$datos['n2']+...$datos['n15'] y para calcular el número por el cual dividir usé if... else para determinar si el valor era mayor que 0. En caso de que sí, le asigno 1 y si no le asigno 0 y después sumo. Al final saco el promedio redondeando con round, pero después de extensas líneas de código y me imagino que debe haber una forma más simple de hacerlo.
3. Después de muchas líneas de código repetido ya tengo mis promedios por asignaturas, pero ahora tengo que sumar esos promedios generados en el while, para el promedio general del semestre. El problema es que no he logrado sumar los valores de $promedio_asignatura en todas las filas generadas. Con num_filas ya sé por cuál dividir, pero me falta la suma.
Como mencioné al principio, con este código pretendo mostrar 1 tabla por semestre, cambiando en cada una el id del semestre a mostrar, más una tercera tabla donde quiero rescatar los promedios de las tablas anteriores. El problema es que como los promedios han salido de dos bucles distintos no sé cómo hacer para traerlos a esta tercera tabla sin tener que hacer una nueva consulta.
Eso sería. Espero cualquier ayuda. Tengo más que claro que es posible hacerlo más simple pero a estas alturas el cansancio mental ya me ha ganado. Agradecido de antemano,
Buena Caza y Largas Lunas.