Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

¿Como hacer "a=a+1" en un trigger con multiples tablas en mySQL?

Estas en el tema de ¿Como hacer "a=a+1" en un trigger con multiples tablas en mySQL? en el foro de Mysql en Foros del Web. En mySQL, me gustaria añadir valores desde una tabla al insertar elementos en ella en otra tabla incialmente vacia usando un trigger. He hecho dos ...
  #1 (permalink)  
Antiguo 29/08/2015, 15:50
 
Fecha de Ingreso: noviembre-2010
Mensajes: 30
Antigüedad: 13 años, 5 meses
Puntos: 0
Exclamación ¿Como hacer "a=a+1" en un trigger con multiples tablas en mySQL?

En mySQL, me gustaria añadir valores desde una tabla al insertar elementos en ella en otra tabla incialmente vacia usando un trigger.

He hecho dos triggers, pero me da problemas al asignar un valor en el segundo trigger.

Primero, he hecho un trigger inicializando los valores de los campos que quiero cambiar después con el otro trigger.

Código MySQL:
Ver original
  1. DELIMITER $$
  2.     CREATE TRIGGER addClavesClasificacion
  3.     BEFORE INSERT ON partido FOR EACH ROW
  4.     BEGIN
  5.         DECLARE idEquipo_clasificacion VARCHAR(20);
  6.         DECLARE idLiga_clasificacion, idJornada_clasificacion INT;
  7.    
  8.         INSERT INTO clasificacion(puntos,nPartidosGF,nPartidosGC,idLiga_clasificacion,
  9.         idJornada_clasificacion,idEquipo_clasificacion)
  10.         VALUES (0,0,0,NEW.idLiga_partido,NEW.idJornada_partido,NEW.idEquipoLocal);
  11.    
  12.         INSERT INTO clasificacion(puntos,nPartidosGF,nPartidosGC,idLiga_clasificacion,
  13.         idJornada_clasificacion, idEquipo_clasificacion)
  14.         VALUES (0,0,0,NEW.idLiga_partido,NEW.idJornada_partido,NEW.idEquipoVisitante);
  15.     END;
  16.     $$
Este segundo es el trigger donde me da el problema, el problema esta en (UPDATE clasificacion SET puntos=puntos+1...). No provoca un error pero cuando realizo un INSERT en la tabla "partido" y luego miro lo resultados en la tabla "clasificacion" de la asignación "puntos=puntos+1" el resultado es un valor null en el campo de la tupla que debería cambiar.

Código MySQL:
Ver original
  1. DELIMITER $$
  2.     CREATE TRIGGER addclasificacion
  3.     AFTER INSERT ON partido FOR EACH ROW
  4.     BEGIN
  5.         DECLARE nPartidosGC, nPartidosGF, puntos INT;
  6.        
  7.         SELECT nPartidosGC INTO nPartidosGC FROM clasificacion
  8.         WHERE NEW.idLiga_partido=idLiga_clasificacion
  9.         AND NEW.idEquipoLocal=idEquipo_clasificacion
  10.         AND  NEW.idJornada_partido=idJornada_clasificacion;
  11.        
  12.         SELECT nPartidosGF INTO nPartidosGF FROM clasificacion
  13.         WHERE NEW.idLiga_partido=idLiga_clasificacion
  14.         AND NEW.idEquipoLocal=idEquipo_clasificacion
  15.         AND NEW.idJornada_partido=idJornada_clasificacion;
  16.        
  17.         SELECT puntos INTO puntos FROM clasificacion
  18.         WHERE NEW.idLiga_partido=idLiga_clasificacion
  19.         AND NEW.idEquipoLocal=idEquipo_clasificacion
  20.         AND NEW.idJornada_partido=idJornada_clasificacion;
  21.    
  22.         UPDATE clasificacion SET puntos=puntos+1
  23.         WHERE NEW.golesLocal=NEW.golesVisitante
  24.         AND NEW.idEquipoVisitante=idEquipo_clasificacion
  25.         AND NEW.idLiga_partido=iDLiga_clasificacion
  26.         AND NEW.idJornada_partido=idJornada_clasificacion;  
  27.     END;
  28.     $$
¿Hay alguna manera de asignar un valor de está manera?

*He probado a asignar ese valor,(UPDATE clasificacion SET puntos=puntos+1) en una tupla concreta fuera del trigger, en un query aparte y funciona perfectamente, no da valor null.

Supongo que el error está en (select puntos ..) en el segundo trigger, pero no estoy seguro y no se como resolverlo.

Última edición por gnzsoloyo; 31/08/2015 a las 06:04

Etiquetas: bbdd, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:43.