DaDyne: SQL - Doppelte Sortierung!?

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!

  1. 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ß!

    1. 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

      1. *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. :)