Will man die Benutzergruppe eines Benutzer in typo3 aus der Datenbank auslesen, steht man zunächst einmal vor einem Problem: Denn alle Benutzergruppen stehen in der Tabelle fe_users im Feld usergroup als Komma-Separierte Liste drin.
Zwar kennt mysql die IN
Abfrage, doch leider funktioniert das folgende nur dann wenn die Benutzergruppe als erstes kommt:
SELECT username FROM fe_users WHERE usergroup IN (3);
Auch LIKE
könnte man verwenden, dass würde allerdings auch 13, 23, 33, usw. matchen und ist somit keine praktische Lösung:
SELECT username FROM fe_users WHERE usergroup LIKE '%3%';
Zum Glück kennt SQL noch eine, grösstenteils unbekannte Funktion: FIND_IN_SET(), mit welcher man die Abfrage machen kann:
SELECT username FROM fe_users WHERE FIND_IN_SET(3,usergroup)>0;
Tipp: Will man direkt nach einem Gruppen-Namen, anstelle der ID suchen, kann man noch eine SQL Subquery einbinden:
SELECT username
FROM fe_users
WHERE
FIND_IN_SET((SELECT uid FROM fe_groups WHERE title='MeineGruppe'),usergroup)>0;
[stextbox id=“note“]Die Abfrage „>0“ ist nicht unbedingt erforderlich, die Abfrage würde also grundsätzlich auch mit:
SELECT username FROM fe_users WHERE FIND_IN_SET(3,usergroup); |
funktionieren.[/stextbox]
Referenzen
- w3schools.com: MySQL FIND_IN_SET() Function
- typo3.net: SQL Abfrage von FE Benutzern einer Benutzergruppe
- typo3forum.net: FE_User mit bestimmter Benutzergruppe per SQL auslesen