Hallo,
BriefingID Name RoleID Right UserID
2 Bla 4 2 2
2 Bla 2 1 2
2 Bla 3 1 2
2 Bla 4 2 3
3 Bla 2 1 4Meine Frage nun: Wie führe ich die Zeilen zusammen?
Ich denke, GROUP BY ist das was Du suchst
SELECT BriefingID, Name, RoleID, MAX(Right), UserID GROUP BY UserID
oder so ähnlich sollte klappen.
Aber warum eigentlich zwei Selects? Wenn Du erstmal ein User-Objekt hast mit einem Vektor aller Rechte, sollte es kein großes Problem sein, eine Methode für dieses User-Objekt zu basteln ("getHighestRight()" oder so) welches von diesem User das höchste Recht ausgibt. Dann solltest Du noch eine Methode haben, um neue Rechte dem Rechtevektor hinzuzufügen (nennen wir sie mal "addRightToVector(right)").
Dann brauchst Du nur noch einen Hash (respektive ein Array in PHP, eine HashMap in Java or whatever), welcher zu jeder User-ID das User-Objekt speichert.
Bei jedem Datensatz aus dem Select verfährst Du dann wie folgt (Pseudo-Code in einer Phantasie-Programmiersprache):
1.) Datensatz d=(BriefingID,Name,RoleID,Right,UserID)
2.) Ist für UserID "d.UserID" schon ein Objekt im Hash/dem Array/der HashMap?)
3.) JA: objekt_aus_hash.addRightToVector(d.Right);
4.) NEIN:
neuerUser = new User(d);
hash.put(d.UserID, neuerUser);
Wenn die Schleife durchgelaufen ist, hast Du einen Hash/eine HashMap/ein Array, welches jeden User (jede UserID) genau einmal enthält, und jeder User aus dieser Map kennt sowohl sein höchstes Recht (getHighestRight()) als auch seine verschiedenen Einzelrechte.
Mehrere SQL-Aufrufe sind i.d.Regel teuer (Zeit- und Lastintensiv)!
Hope that helps,
Viele Grüße,
Jörg