Creé vista como me aconsejaron aqui:
Código:
NotaDeMateria es lo que necesito que se sume por materia (idMaterGrupo), y luego lo promedio para sacar el puntaje final del alumno. Lo hago así en php:CREATE or replace VIEW `vistanotascalculadas` AS select `n`.`idAlumno` AS`idAlumno`, `a`.`NombresAlum` AS `NombresAlum`,`mg`.`idMaterGrupo` AS `idMaterGrupo`, `c`.`idCompet` AS `idCompet`,`i`.`Indicador` AS `Indicador`,`i`.`idIndic` AS `idIndic`, `ga`.`idPeriodo` AS `idPeriodo`,`g`.`idGrupo` AS `idGrupo`, `g`.`NombreGrupo` AS `NombreGrupo`, ((((`c`.`PorcCompet`* `i`.`PorcIndic`) / 100) * `n`.`Nota` )/100) AS `NotaDeMateria` from ((((((`tbnotas` `n` join `tbindicadores` `i`) join `tbcompetencias` `c`) join `tbmateriagrupo` `mg`) join `tbalumnos` `a`) join `tbgrupoalumnos` `ga`) join `tbgrupos` `g`) where ((`n`.`idIndic` = `i`.`idIndic`) and (`i`.`CompetenciaIndic` = `c`.`idCompet`) and (`mg`.`idMaterGrupo` = `c`.`MateriaGrupoCompet`) and (`a`.`idAlum` = `n`.`idAlumno`) and (`mg`.`idGrupo` = `g`.`idGrupo`) and (`g`.`idGrupo` = `ga`.`idGrupo`) and (`ga`.`idAlumno` = `a`.`idAlum`)) order by `n`.`idAlumno`
Código:
Aquí es donde me agrupa sumando todas las NotaDeMateria sin hacer distinción de periodo Sin embargo me doy cuenta que no debo tener una vista así pues cada periodo se está multiplicando de forma terrible con todas las notas existentes. Así que opté por hacer una vista por periodo:$sqlMat="select idAlumno, NombresAlum, idMaterGrupo, SUM(NotaDeMateria) AS PromMater from `vistanotascalculadas` where idAlumno=".$rSqlAl['idAlumno']." and idPeriodo=".$_SESSION['PeriodoUsu']." GROUP BY idMaterGrupo";
Código:
Luego con php:CREATE or replace VIEW `vistanotascalculadasper1` AS SELECT `n`.`idAlumno` AS`idAlumno`, `a`.`NombresAlum` AS `NombresAlum`, `mg`.`idMaterGrupo` AS `idMaterGrupo`, `c`.`idCompet` AS `idCompet`,`i`.`Indicador` AS `Indicador`, `i`.`idIndic` AS `idIndic`, `ga`.`idPeriodo` AS `idPeriodo`,`g`.`idGrupo` AS `idGrupo`, `g`.`NombreGrupo` AS `NombreGrupo`, ((((`c`.`PorcCompet`* `i`.`PorcIndic`) / 100) * `n`.`Nota` )/100) AS `NotaDeMateria` from ((((((`tbnotas` `n` join `tbindicadores` `i`) join `tbcompetencias` `c`) join `tbmateriagrupo` `mg`) join `tbalumnos` `a`) join `tbgrupoalumnos` `ga`) join `tbgrupos` `g`) where ((`n`.`idIndic` = `i`.`idIndic`) and (`i`.`CompetenciaIndic` = `c`.`idCompet`) and (`mg`.`idMaterGrupo` = `c`.`MateriaGrupoCompet`) and (`a`.`idAlum` = `n`.`idAlumno`) and (`mg`.`idGrupo` = `g`.`idGrupo`) and (`g`.`idGrupo` = `ga`.`idGrupo`) and (`ga`.`idAlumno` = `a`.`idAlum`) ) AND `idPeriodo`=1 order by `n`.`idAlumno`
Código:
vistanotascalculadasper1 no me hace distinción entre periodos tampoco, ¿Cómo hago para hacer una vista por periodo y sacar los puestos?(Esto es lo q necesito).$sqlMat="select idAlumno, NombresAlum, idMaterGrupo, SUM(NotaDeMateria) AS PromMater from `vistanotascalculadasper".$_SESSION['PeriodoUsu']."` where idAlumno=".$rSqlAl['idAlumno']." GROUP BY idMaterGrupo";
La primera vista, aunque ya no me parece una opción, me gustaría que me explicaran por qué no agrupa por periodo, pues la trabajé mucho y no entiendo porqué me agrupa sin tener en cuenta el periodo.