Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/02/2011, 12:15
marcosaguileraly
 
Fecha de Ingreso: febrero-2011
Mensajes: 4
Antigüedad: 13 años, 10 meses
Puntos: 0
Pregunta Insert ó update: Si existe un registro o no existe

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 `promedioAFTER 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 (idalumnocalifnumSELECT idalumnoAVG(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.
califnumAVG(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