Hola CHICOS, soy nuevo en la comunidad y gracias por brindarme este espacio, les cuento que actualmente estoy haciendo una DB escolar, y como saben las calificaciones de los estudiantes son importantes, basicamente es lo siguiente.
Creo un trigger con evento AFTER INSERT que toma todas las clificaciones asignadas a un mismo estudiante realiza un procedimiento de PROMEDIO (MEDIA) y lo enviea a otra tabla para guardar alli la nota final.
Tengo 2 Tablas:
1. Historial_calificaciones
| idHistorial | ** |
idalumno| ** |
califnum | ** |fecha_ingreso
2. final
| idfinal | ** |
idalumno| ** |
califnum| --califnum es igual a decir promedio
PERO dichas acciones dependiente de:
1. Si NO existe el id del estudiante (idalumno) entonces inserta los datos en
historial_caficaciones y luego envia el promedio a
final en el campo
califnum simpre y cuando NO EXISTA UN REGISTRO CREADO.
2. SI EXISTE ya un estudiante (idalumno) en la tabla
Historial_calificaciones simplemente realiza una actualizacion al PROMEDIO del alumno ya creado el
final
es decir si existe, actualiza el promedio.
Para el promedio uso AVG(califnum) y lo selecciono por el idalumno, asi sacara el promedio de un estudiante
Para ello estoy usando un trigger que es este:
Código PHP:
DROP TRIGGER IF EXISTS `promedio`//
CREATE TRIGGER `promedio` AFTER INSERT ON `tabla2`
FOR EACH ROW BEGIN
DECLARE total_final INT(11);
-- Cargo la Variable con la Cantidad de Registros
SET total_final = (SELECT COUNT(*) FROM final WHERE idalumno= NEW.idalumno GROUP BY idalumno);
-- Luego Tu codigo del If
IF total_final = 0 THEN
INSERT INTO final (idalumno, califnum) SELECT idalumno, AVG(califnum)
as califnum FROM tabla2 WHERE final.idalumno=NEW.idalumno GROUP BY idalumno;
END IF;
IF total_final > 0 THEN
UPDATE final SET
final.idalumno= NEW.idalumno,
final.califnum= AVG(califnum)
WHERE final.idalumno=NEW.idalumno;
END IF;
END
//
Pero no funciona, quisiera que alguien me ayudase, estuve mirando otros post, pero no encotre solucion, por favor, ayuda!
-Marcos Aguilera