danielhalle: MYSQL Trigger mit IF Syntax

Beitrag lesen

Hallo ich sitze gerade an einer kleine Versuchsreihe mit Triggern und Prozeduren in MYSQL 5.1

Ich habe 2 Tabllen die identisch aufgebaut sind

CREATE TABLE tbl\_oshop\_master\_m (
  ID int(5) NOT NULL COMMENT 'SHOPID und LOGO mit der ENDUNG *.gif',
  VALID\_FROM datetime NOT NULL,
  VALID\_TO datetime DEFAULT NULL,
  ID\_OFFERER tinyint(4) NOT NULL,
  ID\_PROGRAM int(10) NOT NULL,
  PARTNER\_CODE char(30) DEFAULT NULL COMMENT 'NUR BEI ZANOX',
  NAME char(255) NOT NULL,
  KEY ID (ID,VALID\_FROM,VALID\_TO,ID\_OFFERER,ID\_PROGRAM,NAME)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Und 2 Trigger die Bei einem Update oder Delete Anspringen sollen

CREATE TRIGGER tbl\_oshop\_master\_update BEFORE UPDATE ON tbl\_oshop\_master\_m
  FOR EACH ROW BEGIN
     INSERT INTO tbl\_oshop\_master\_h VALUES (OLD.ID, OLD.VALID_FROM,NOW()-INTERVAL 1 SECOND, OLD.ID_OFFERER, OLD.ID_PROGRAM, OLD.PARTNER_CODE, OLD.NAME);
  END;

Delimiter ist beachtet :)

Folgendes Problem:
Wenn ich einen Datensatz update denn verschiebt er ihn ordnungsgemäß in die Tabelle. Doch zu beachten ist das Gültigkeitsdatum (VALID_FROM, VALID_TO). Wenn ich den Datensatz update und ein Datum in der Zukunft angebe (NEW.VALID_TO) schreibt er es trotzdem um. Habe dafür auch mehere Trigger gebastelt um das zu versuchen

CREATE TRIGGER tbl\_oshop\_master\_update BEFORE UPDATE ON tbl\_oshop\_master\_m
  FOR EACH ROW BEGIN
 IF (NEW.VALID_TO IS NULL) THEN
     INSERT INTO tbl\_oshop\_master\_h VALUES (OLD.ID, OLD.VALID_FROM,NOW()-INTERVAL 1 SECOND, OLD.ID_OFFERER, OLD.ID_PROGRAM, OLD.PARTNER_CODE, OLD.NAME);
 END IF;
  END;

oder

CREATE TRIGGER tbl\_oshop\_master\_update BEFORE UPDATE ON tbl\_oshop\_master\_m
  FOR EACH ROW BEGIN
 IF (NEW.VALID_TO < NOW()) THEN
     INSERT INTO tbl\_oshop\_master\_h VALUES (OLD.ID, OLD.VALID_FROM,NOW()-INTERVAL 1 SECOND, OLD.ID_OFFERER, OLD.ID_PROGRAM, OLD.PARTNER_CODE, OLD.NAME);
 END IF;
  END;

oder

CREATE TRIGGER tbl\_oshop\_master\_update BEFORE UPDATE ON tbl\_oshop\_master\_m
  FOR EACH ROW BEGIN
 IF (NEW.VALID_TO <> NOW()) THEN
     INSERT INTO tbl\_oshop\_master\_h VALUES (OLD.ID, OLD.VALID_FROM,NOW()-INTERVAL 1 SECOND, OLD.ID_OFFERER, OLD.ID_PROGRAM, OLD.PARTNER_CODE, OLD.NAME);
 END IF;
  END;

Ich hoffe Ihr könnt mir helfen. Die abgelaufenden Datensätze mit Enddatum werden später einfach gelöscht über eine Timerfunktion in MYSQL und der DELETE Trigger verschiebt Sie was auch super klappt. Mir Geht es alleinig Darum irgendwie das Datum abzufangen.

Gruß Daniel