Hallo,
Könnte ich aber fragen, was dein MAX(rightID) in der Query macht? Ist es genau das Problem mit dem ORDER BY, wenn ich das mit zwei Selects gemacht hätte?
ChrisB hat das glaube ich in seinem Post auch schon angerissen, hier aber nochmal eine Ergänzung:
ORDER BY bestimmt nur die Reihenfolge der Ausgabe.
Du kannst mit "ORDER BY" immer nur sagen, in welcher Reihenfolge Du Datensätze haben willst, an den Datensätzen selbst ändert sich aber nichts.
Order By steht üblicherweise immer ganz am Schluss eines Selects.
Anders bei "GROUP BY": Es gibt verschiedene sog. Agregatsfunktionen in SQL mit denen Du eine bestimmte Menge von Datensätzen agregieren (= zusammenfassen kannst) - z.b. aufsummieren, durchzählen oder wie in Deinem Fall das Maximum bilden.
Mit GROUP BY definierst Du, nach welchem Kriterium die einzelnen Mengen, die zusammengefasst werden sollen, gebildet werden.
Lässt Du es weg, wird eine einzige große Menge mit allen Datensätzen gebildet, Du erhältst dann also genau ein Ergebnis zurück.
Beispiel:
SELECT MAX(Right) FROM user
lies: "Liefere mir das Maximum der Spalte "Right" aus der Tabelle "user".
Dies liefert (keine große Überaschung ;)) einen einzigen Datensatz, nämlich den höchsten Wert von "Right" in der Tabelle user.
Jetzt mit Group By:
SELECT MAX(Right) FROM USER GROUP BY userid
lies: "Bilde für jede userid eine eigene Gruppe von Datensätzen. Jetzt gib mir für jede dieser Gruppen das Maximum der Spalte "Right".
Liefert Dir für jede UserID genau einen Datensatz, nämlich das Maximum der Spalte Right.
Hoffe das machts etwas klarer.
Viele Grüße,
Jörg