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