Trigger - Verschachtelung

0luca0

Neuer Benutzer
Beiträge
3
Hi

Erstmal den Tabellenaufba damit es leichter verständlich ist. Folgende Tabellen/Columns sind vorhanden:
- meeting.id
- meeting.type
- meeting_contact.meeting-id
- meeting_contact.contact-id
- contact_list.list-id
- contact_list.contact-id

Der Trigger wird ausgelöst bei:
AFTER INSERT INTO 'meeting'.
Dann soll geprüft werden ob bei dem in "meeting" eingefügten Eintrag der Spalte 'type'="Extern" ist. Falls das Ergebnis TRUE ist soll er bei allen Einträgen in 'meeting_contact' wo 'meeting_contact'.'meeting-id' = 'meeting'.'id' (aus der ersten Abfrage) ist. Für all diese Einträge auf die das zutrifft soll in der Tabelle 'contact_list' ein neuer Eintrag gemacht werden mit folgenden Werten:
'list-id' => "12345" (Hard Coded Value)
'contact-id' => Wert des aktuellen Eintrags (aus der vorherigen Abfrage) aus der Spalte 'contact-id'


Ich hoffe das kam genug verständlich rüber..
Jemand eine Idee wie und ob man das in mysql lösen kann?

LG Luca
 
Werbung:
Du hast ja eigentlich schon alles erklärt, das muss nur noch in Code gegossen werden. Den Trigger kann ich dir nicht gut erstellen, ich kenne da die MySQL Syntax nicht gut genug, aber die eigentliche Aktion im Trigger ist gar nicht so schwer und geht in etwa so:
Code:
INSERT INTO contact_list VALUES([list-id],[contact-id])
SELECT   12345 AS [list-id],
     mc.[contact-id]
FROM   NEW m
INNER JOIN meeting_contact mc
ON     m.id = mc.[meeting-id]
WHERE   m.[type] = 'Extern'
NEW ist meines Wissens nach alles was in der Tabelle eingefügt wurde als der Trigger ausgelöst hat.
 
Ich habe den Beitrag gestern unterwegs geschrieben und bei den Tabellen-/Spaltennamen Fehler gemacht.. Hier ist die korrigierte Version:
- meeting.id
- meeting.type
- contact_meeting.meeting_id
- contact_meeting.contact_id
- contact_target_list.target_list_id
- contact_target_list.contact_id

Ich habe nun den Code entsprechend angepasst:
Code:
INSERT INTO contact_target_list VALUES([target_list_id],[contact_id])
SELECT   12345 AS [target_list_id],
     mc.[contact_id]
FROM   NEW m
INNER JOIN contact_meeting mc
ON     m.id = mc.[meeting_id]
WHERE   m.[type] = 'Extern'

Siehst du da einen Fehler?

Bei:
Code:
INSERT INTO contact_target_list VALUES([target_list_id],[contact_id])
SELECT   12345 AS [target_list_id],
     mc.[contact_id]
FROM   NEW m
INNER JOIN contact_meeting mc
ON     m.id = mc.[meeting_id]
WHERE   m.[type] = 'Extern'
meckert er, wegen den eckigen Klammern. Wenn ich die eckigen Klammern wegnehme, zeigt er mir erstmal keine Fehler mehr an, erst wenn ich speichern möchte:
Fehlermeldung als IMG
Achtung, die Hard Coded Values "12345" und "Extern" wurden hier ersetzt, sowie versuche ich hier den INSERT in eine Copy einer Tabelle zu machen.
 
Zuletzt bearbeitet:
NACHTRAG:
Beim zweiten Code sollte folgendes stehen:
Code:
INSERT INTO contact_target_list VALUES([target_list_id],[contact_id])
SELECT   '12345' AS [target_list_id],
     mc.[contact_id]
FROM   NEW m
INNER JOIN contact_meeting mc
ON     m.id = mc.[meeting_id]
WHERE   m.[type] = 'Extern'
 
Werbung:
Also ich nutze MySQL nicht, bin mir aber sicher das es prinzipiell so geht. Ich kenne allerdings die Syntax nicht bzgl. der "Systemtabelle" NEW. Bei MSSQL spricht man die wie eine Tabelle an, bei MySQL kann oder muss man das irgendwie abkürzen.
MySQL :: MySQL 5.7 Reference Manual :: 21.3.1 Trigger Syntax and Examples
Ich rate jetzt mal:
Code:
INSERT INTO contact_target_list VALUES([target_list_id],[contact_id])
SELECT   '12345' AS [target_list_id],
     mc.[contact_id]
FROM   contact_meeting mc
WHERE   mc.[meeting_id] = NEW.id
AND     NEW.[type] = 'Extern'
 
Zurück
Oben