SQL - Doppelte Sortierung!?
DaDyne
- datenbank
Ich hab eine kleine Denkblockade bei folgendem Problem. Ich habe eine Datenbanktabelle in der es u.a. die Felder 'word' und 'points' gibt.
Es sollen die 3 Einträge mit den meisten 'points' abgefragt werden. Soweit kein Problem mit "ORDER BY points DESC LIMIT 3". Aber sie sollen auch in alphabetischer Reihenfolge (bzgl dem Feld 'word') zurückgegeben werden.
Beispiel:
word, points
Bär, 12
Affe, 32
Falke, 38
Esel, 17
Chamäleon, 2
Dromedar, 35
Soll folgendes zurückgeben:
word, points
Affe, 32
Dromedar, 35
Falke, 38
Ich habe schon folgendes versucht:
ORDER BY points DESC, word LIMIT 3
Aber dann kommen zwar die 3 Datensätze mit den meisten 'points', aber sie sind nicht nach 'word' sortiert.
Ist das überhaupt mit einer SQL-Abfrage realisierbar?
Hoffe ich konnte gut erklären was ich möchte.
Danke im Voraus!
Hallo,
also eine "normale" doppelte Sortierung ist das ja nicht.
Doppelte Sortierung, wie Du sie probiert hast, wird nur dann wirksam,
wenn die Werte in der ersten Suchspalte identisch sind.
Theoretisch wäre ein Subselect hier angebracht, doch mysql
unterstützt bis dato keine Subselects, die limits beinhalten.
(Oder benutzt Du eine andere DB? )
Deswegen mußt Du wohl über eine temporäre Tabelle da rangehen.
Ich hab Deine Tabelle mal bei mir vielsagenderweise "test" genannt.
Eine Abfrage per php könnte dann so aussehen:
mysql_query("create temporary table testtmp type=heap
select * from test
order by points desc
limit 3");
$abfrage=mysql_query("select * from testtmp order by word");
Schönen Gruß!
Danke für deine Antwort!
Theoretisch wäre ein Subselect hier angebracht, doch mysql
unterstützt bis dato keine Subselects, die limits beinhalten.
(Oder benutzt Du eine andere DB? )
Ich benutze mysql.
Ich habe es inzwischen so gelöst:
SELECT * FROM
( SELECT word, points FROM tabelle ORDER BY points DESC LIMIT 3 ) as tmp
ORDER BY word
Und es funktioniert prima, obwohl ein LIMIT im Subselect enthalten ist.
Schönen Gruß!
Zurück, und danke für deine Mühe
*ausprobier*
Tatsache, muß es also präzisieren:
MySQL unterstützt bis dato keine subselect-limits _in_der_WHERE-Klausel_.
Ich hatte Dir zuerst sowas hier vorsetzen wollen:
select * from test where word in
(select word from test order by points desc limit 3)
order by word
Doch das Ergebnis war:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
( MySQL 5.0.37 )
und danke für deine Mühe
Danke für die interessante Frage. :)