SQL-Query mit zwei sequentiellen Sortierkriterien
-
Hi,
ich versuche gerade, eine SELECT-Anweisung hinzubekommen, die zwei Kriterien _hintereinander_ abarbeitet. D.h., es sollen die ersten zehn gefundenen Einträge nach dem wert in "used" sortiert werden, und so bald diese zehn Datensätze da sind, der rest nach dem Wert in "name".
Mein Ansatz wäre gewesen:
SELECT * FROM table (ORDER BY used DESC LIMIT 10), ORDER BY name
Aber das geht so nicht, MySQL lehnt die beiden aufeinander folgenden ORDER/LIMIT ab. Wie geht das sonst - bzw. geht das überhaupt? Es würde auch nicht stören, wenn in den restlichen, nach "name" sortierten Datensätzen auch diejenigen, die bereits nach "used" aufgelistet worden sind, wieder auftauchen.
-
Du könntest mal versuchen, zwei Anfragen zu starten und diese zu vereinigen:
SELECT * FROM table ORDER BY used DESC LIMIT 10 UNION SELECT * FROM table ORDER BY name
Durch die Vereinigung und das Ausfiltern der Top10 aus dem zweiten Statement (UNION statt UNION ALL) könnten aber die Datensätze wieder durcheinandergewürfelt werden. Ein Trick könnte nun darin bestehen, zusätzliche Sortierspalten anzufügen und danach nocheinmal abschließend zu sortieren:
SELECT * FROM ( SELECT *,'1' as sort1,used as sort2 FROM table ORDER BY used DESC LIMIT 10 UNION SELECT *,'2' as sort1,name as sort2 FROM table ORDER BY name ) v ORDER BY sort1,sort2
Wieweit das mit MySQL geht weiß ich nicht.