0 Pluspunkte 0 Minuspunkte

Ich hole alle Gruppen-IDs in einer Variable @usergroups.

SET @usergroups = ( SELECT id FROM groups WHERE id IN (SELECT group_id FROM groupmemberships WHERE user_id = (SELECT id FROM users WHERE name='max.mustermann') ) );

Wenn ich die Variable dann für einen weiteren Query nutzen möchte

SELECT name FROM groups WHERE id IN @usergroups ;

bekomme ich die Fehlermeldung

#1242 - Unterabfrage lieferte mehr als einen Datensatz zurück

Wie kann ich die Variable @usergroups verwenden um im 2. Query danach zu suchen?

von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Eine Variable kann nur einen einzigen Wert beinhalten. Statt in deinem deinem ersten Query alle IDs in einer Liste zu erhalten, kannst du die IDs mit der MySQL-Funktion GROUP_CONCAT in einem mit Komma getrenntem String speichern.

SET @usergroups = ( SELECT GROUP_CONCAT(id) FROM groups WHERE id IN (SELECT group_id FROM groupmemberships WHERE user_id = (SELECT id FROM users WHERE name='max.mustermann') ) );

und statt

SELECT name FROM groups WHERE id IN @usergroups;

kannst du dann die MySQL-Funktion FIND_IN_SET nehmen die mit einem solchen String arbeiten kann.

SELECT name FROM groups WHERE FIND_IN_SET(id, @usergroups);
von (786 Punkte)  
0 Pluspunkte 0 Minuspunkte
Du kannst die IDs in eine temporäre Tabelle einfügen und von da aus mit einem SELECT Statement im IN-Statement verwenden.
von (544 Punkte)