2017-06-06 3 views
0

Ich habe zwei Tabellen: Benutzer [ID, E-Mail] und Rollen [ID, Name] mit vielen-zu-viele Verbindungstabelle user_has_roles [Benutzer-ID, Rolle_ID]. Ich versuche Tisch zu bekommen, die zeigen, welche Benutzer bestimmte Rolle hat und wenn nicht, dann null (oder 0) ähnlich wie folgt vor:Viele zu viele Abfrage MySQL

  | role 1 | role 2 | role 3 
--------------------------------------- 
[email protected] | 1  | null | 1 
[email protected] | null | null | 1 
--------------------------------------- 

viel auf diese jede Hilfe dankbar.

Antwort

0
select u.email, 
     case when sum(r.name = 'role 1') > 0 then 1 else null end as `role 1`, 
     case when sum(r.name = 'role 2') > 0 then 1 else null end as `role 2`, 
     case when sum(r.name = 'role 3') > 0 then 1 else null end as `role 3` 
from users u 
left join user_has_roles ur on ur.user_id = u.id 
left join roles r on ur.role_id = r.id 
group by u.email 
+0

Danke für die schnelle Antwort. Aber es zeigt folgenden Fehler: Ein Ausdruck wurde erwartet. (in der Nähe von "Fall" an Position 25) –

+0

Sind Sie sicher, dass Sie es genau wie meine Abfrage angewendet haben? –

+0

Lesen Sie die Dokumentation ... es sollte korrekt sein, aber nicht sicher, warum phpmyadmin es nicht akzeptiert .... :) –