Registro automático de asignaturas al inicio del periodo académico

  • Autor Autor hamedm
  • Fecha de inicio Fecha de inicio
H

hamedm

Gamma
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas Forobetanos, he estado en un proyecto relacionado con la academia y estoy haciendo un portal relacionado con ello.
Sucede que cada grado tiene ciertas asignaturas. Quiero que cuando se crea un nuevo periodo o Año academico, todas las asignaturas de los grados vuelvan a registrarse en esa misma tabla pero ahora con el nuevo periodo.
Lo estoy haciendo en un procedimiento Almacenado para luego invocarlo en un trigger. Sucede que cuando lo invoco, solo me duplica el ultimo registro y no todos los del año o periodo pasado. Este es el codigo:
<code>
DROP PROCEDURE IF EXISTS proc_ins_grado_has_asignatura_after_Ano_has_Periodo;
DELIMITER $$
CREATE PROCEDURE proc_ins_grado_has_asignatura_after_Ano_has_Periodo(IN periodo INT)
BEGIN
declare resta INT;
SET resta = 0;
WHILE (SELECT COUNT(ano_per_id)-resta FROM Grado_has_Asignatura WHERE ano_per_id = (SELECT ano_per_id FROM Grado_has_Asignatura ORDER BY ano_per_id DESC LIMIT 1))>0 DO
INSERT INTO Grado_has_Asignatura (gra_id,asi_id,ano_per_id) SELECT gra_id,asi_id,periodo FROM Grado_has_Asignatura WHERE gra_asi_id = (SELECT gra_asi_id-resta FROM Grado_has_Asignatura ORDER BY ano_per_id DESC LIMIT 1);
SET resta = resta+1;
END WHILE;
END $$
DELIMITER ;
CALL proc_ins_grado_has_asignatura_after_Ano_has_Periodo(2);
</code>
 
Si quieres copiar toda la info de tu tabla Grado_has_Asignatura por el último ano_per_id registrado. Lo que tienes que hacer es obtener la info como lo estas haciendo en tu subquery y luego hacer un INSERT SELECT, claro que en el SELECT donde va el valor de ano_per_id tendrías que reemplazarlo por el ID que generaste para tu nuevo periodo.

INSERT INTO Grado_has_Asignatura(gra_id,asi_id,ano_per_id)
SELECT gra_id,asi_id,AquiTuNuevoIDPeriodo
FROM Grado_has_Asignatura
WHERE ano_per_id = (SELECT DISTINCT ano_per_id FROM Grado_has_Asignatura ORDER BY ano_per_id DESC LIMIT 1)

1592089144330.webp


1592089221163.webp


1592089279965.webp


Saludos.
 
Atrás
Arriba