Ich habe eine "group_names" Tabelle, die Benutzergruppen speichert. Jede Gruppe hat einen Manager, der entweder ein einzelner Benutzer sein kann oder von einer anderen Gruppe verwaltet werden kann. Dies wird derzeit durch group_names.mgr_type bestimmt. Ein INT-Wert von 1 bedeutet, dass es sich um einen einzelnen Benutzer handelt, und ein Wert von 2 bedeutet, dass es sich um eine Gruppe handelt, die sie verwaltet.
Zum Beispiel könnte die Gruppe "Allgemeine Benutzer" von der Gruppe "IT-Abteilung" oder von "John Doe" verwaltet werden. Die eindeutigen ID-Felder in den Benutzer- und group_names-Tabellen sind "user_id" und "group_id".
Ich möchte die Logik aus PHP nehmen und einfach in die SQL-Abfrage einfügen, aber hier stoße ich auf Probleme. Ich bin mir nicht sicher, ob dies anhand des Tabellenaufbaus möglich ist oder ob ich einfach nicht in der Lage bin, einfache Anweisungen aus der Dokumentation zu befolgen.
SELECT gn.group_id, gn.group_name, ... gn.mgr_id, CONCAT(usr.user_firstname,' ',usr.user_lastname) AS created_name, usr.user_id,
CASE gn.mgr_type
WHEN '1' THEN CONCAT(usr.user_firstname,' ',usr.user_lastname) WHERE usr.user_id=gn.mgr_id LIMIT 1
WHEN '2' THEN gn.group_name WHERE gn.group_id=gn.mgr_id LIMIT 1
END AS mgr_name
FROM group_names gn
LEFT JOIN users usr
ON gn.created_by=usr.user_id
ORDER BY group_name ASC;
Ich habe verschiedene Variationen von IF und CASE ausprobiert, mit und ohne Klammern, bekomme aber immer den Fehler "Ungültige Syntax".
...für die richtige Syntax in der Nähe von 'WHERE usr.user_id=gn.mgr_id LIMIT 1) WHEN '2' THEN (gn.group_name WHERE gn' in Zeile 3
Kann ich überhaupt eine andere Zeile aus derselben Tabelle auswählen (den Gruppennamen aus einer anderen Zeile basierend auf mgr_id=group_id auswählen) oder sollte ich eine weitere Tabelle hinzufügen? Haben Sie Vorschläge für eine einfachere/effizientere Methode, dies zu tun?
Danke!