Moin!
Ich habe da mal wieder ein (MySQL-)Problem, bei dem ihr mir sicher helfen könnt:
Es gibt eine User-Tabelle, die ein paar Felder hat, hier reichen zunächstmal 2:
tuser.id: auotinc
tuser.email: Email-Adresse
etc.pp.
Dann gibt es eine Vorgangs-Tabelle:
tincident.id: autoinc
tincident.name: Vorgang
tincident.assigned: Benutzer, der dafür zuständig ist
etc.pp.
Und es gibt noch eine Nachrichten-Marker-Tabelle, die Benutzer markiert, die zu einem bestimmten Vorgang benachrichtigt werden wollen:
tnotify.id: autoinc
tnotify.incident_id: Vorgangs-Nr.
tnotify.user_id: User-Nr.
Sagen wir mal, der Vorgang Nr. 123 wird geändert, die Benutzer sollen benachrichtigt werden. An sich keine große Sache:
SQL-Anweisung
1: 2: 3:
| SELECT tuser.email FROM tnotify LEFT JOIN tuser ON tnotify.user_id = tuser.id WHERE tnotify.incident_id = 123 |
Liefert brav, was es soll.

(In der Praxis hole ich natürlich noch ein paar mehr Felder aus der User-Tabelle, nicht nur die Email)
Jetzt das "Problem":
Am Vorgang ist auch ein Benutzer hinterlegt, der für das Ding zuständig ist. Dieser soll immer eine Nachricht bekommen, egal ob er sie wünscht oder nicht.

Gut, kann man mit einem UNION dranhängen, dann habe ich aber ggfs. zwei mal eine Nachricht gesendet, weil der Bearbeiter ja auch schon in der ersten Ergebnismenge enthalten sein könnte.
Wie knote ich jetzt diesen Bearbeiter in die Ergebnismenge rein, ohne diesen im Zweifel doppelt zu haben?
cu
Narses
//EDIT: Ich bemerke gerade beim Basteln an der Abfrage, dass UNION offenbar nur die Auswahl erweitert, der Datensatz kommt in der Ergebnismenge nicht doppelt vor, wenn ich das so abfrage: (User 3 hat einen Eintrag in tnotify und ist Bearbeiter)
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7:
| SELECT tuser.email FROM tnotify LEFT JOIN tuser ON tnotify.user_id = tuser.id WHERE tnotify.incident_id = 123 UNION SELECT tuser.email FROM tuser WHERE tuser.id = 3 |
Kann das sein?
//EDIT2:
| MySQL-Hilfe zu UNION hat folgendes geschrieben: |
| Geben Sie das Schlüsselwort ALL an, dann enthält das Ergebnis alle passenden Datensätze aus allen SELECT-Anweisungen. Wenn Sie DISTINCT angeben, werden doppelte Datensätze aus dem Ergebnis entfernt. Wird kein Schlüsselwort benutzt, dann entspricht das Standardverhalten dem von DISTINCT (Entfernung doppelter Datensätze). |
Scheint also per Default zu passen, ist ja witzig...
Schonmal jemand an dieser Stelle Erfahrungen gesammelt? Probleme gehabt?

There are 10 types of people - those who understand binary and those who don´t.