# mySQL trigger auf zwei Tabellen



## freakcx (6. August 2008)

Hab jetzt schon lange google gequält aber weiß auch nicht recht wonach ich suchen sollte.

Folgende Problematik:

Ich habe zwei Tabellen die von zwei verschiedenen CMS mit User Datengefüllt werden. nutzer und pw sollen jedoch immer wenn sie aktualisiert werden in beiden tabllen aktuell gehalten sein. Dazu habe ich folgenden Trigger geschrieben:


```
CREATE TRIGGER
        upd_wpuser
BEFORE UPDATE ON
        wp_users
FOR EACH ROW
UPDATE
        sys_user
SET
        username = NEW.user_login,
        password = NEW.user_pass
WHERE
        username =  OLD.user_login;
```

Das verursacht das sobald der User in tabelle wp_users geändert wird er auch in sys_user geändert wird. Nur eben nicht anders rum. Ein zweiter Trigger geht aber nicht da sich doch sonst beide Trigger immer gegenseitig auslösen würden.

Jemand eine Idee wie man das lösen kann?

Danke schon mal!


----------



## dbwizard (6. August 2008)

freakcx hat gesagt.:


> Das verursacht das sobald der User in tabelle wp_users geändert wird er auch in sys_user geändert wird. Nur eben nicht anders rum. Ein zweiter Trigger geht aber nicht da sich doch sonst beide Trigger immer gegenseitig auslösen würden.
> 
> Jemand eine Idee wie man das lösen kann?
> 
> Danke schon mal!



- Am besten in der Logik, welche die restliche Daten abfüllt, da gehört es ja eigentlich eh hin ?


Gruss


----------



## freakcx (6. August 2008)

Prinzipiell hast du Recht. Jedoch würde ein Trigger dann nie Sinn machen oder? Es hätte aufjedenfall Sinn gemacht weil es quatsch ist zwei Quellcodes einzugreifen wenn es mit einem Trigger zu lösen wäre, vor allem weil es ein Sonderfall ist und die Systeme bei bedarf ohne Quellcode eingriff wieder von einander lösbar wären. Werde jetzt das Haupt System mit einem Trigger zur anderen Tabelle verlinken und das kleinere System um ein zweites Statement erweitern.

Gruß Chris


----------



## dbwizard (6. August 2008)

freakcx hat gesagt.:


> Jedoch würde ein Trigger dann nie Sinn machen oder?
> Gruß Chris



- Tut er auch nicht (Just my 2-cents)


----------



## sceppi (7. August 2008)

Hallo,
du könntest doch vor einen update in der jeweiligen tabelle schauen, wann die letzte Änderung war und falls der Datensatz älter ist, ein Update machen. Setzt natürlich vorraus, dass das Datum mitgespeichert wird.
Bsp:

Trigger A schaut bei Tabelle nach Datum -> älter -> update -> trigger B schaut bei Tabelle A -> gleich alt -> keine Reaktion


----------



## dbwizard (7. August 2008)

sceppi hat gesagt.:


> Hallo,
> du könntest doch vor einen update in der jeweiligen tabelle schauen, wann die letzte Änderung war und falls der Datensatz älter ist, ein Update machen. Setzt natürlich vorraus, dass das Datum mitgespeichert wird.
> Bsp:
> 
> Trigger A schaut bei Tabelle nach Datum -> älter -> update -> trigger B schaut bei Tabelle A -> gleich alt -> keine Reaktion




-Und das ist Transaktionssicher mit 100 Session's offen ?


----------



## sceppi (7. August 2008)

da trigger im Kontext der Anwendungs-Transaktionsverwaltung laufen schon. Und es geht ja immer um den gleichen user.

Oder hat sich da ein denkfehler eingeschlichen?


----------



## freakcx (18. August 2008)

Hab das ganz jetzt mal versucht umzusetzen mit IF gibt aber folgende zwei Fehler aus:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END IF' at line 1

MySQL 5.0


```
CREATE TRIGGER
        upd_wpuser
BEFORE UPDATE ON
        wp_users
FOR EACH ROW
BEGIN
    IF DATEDIFF(OLD.user_lastmod, NEW.user_lastmod) != 0 THEN
        UPDATE
                sys_user

        SET
                username = NEW.user_login,
                password = NEW.user_pass
        WHERE
                username =  OLD.user_login;
    END IF;
END;
```

jemand eine Idee was falsch ist?


----------



## bugzz (16. September 2009)

Hallo, Experten! Ich habe ein Problem mit Trigger. Ich spiel' grad mit einer 'zukünftigen' datenbank fürn umzugsunternehmen. 
SO. Es gibt zwei tabellen:
1. auftraggeber (agID, name, vorname, adresse, ort)
2. auftrag (auf_id, von, nach, erledigt (JA/NEIN), agID) <- 

Ziel ist ine trigger zu erstellen der die adresse in der tabelle auftraggeber mit der nach-adresse (aus tabelle 'auftrag', spalte 'nach') ersetz, falls aufttag-status (spalte erledigt) auf JA gesetz worden ist.
Also es handelt sich um einen 'AFTER UPDATE' trigger....

und hier ist mein code und ständig mekomme ich sysntax fehlermeldung.....weiss echt nicht was ich falsch mache


```
create trigger
	neu_adresse
after update on 
	auftrag
for each row
begin
	if new.status = 'JA' then
		update auftragggeber
		set adresse = new.nach 
		where old.AgIF = new.AgID;
	end if;
end;
```


P.S. Ich benutze Mysql 5.0.71 und arbeite unter PHPmyAdmin


----------

