Datenbankabfrage - nur höchster Wert pro User

  • Hallo,
    gegeben ist folgende Datenbankabfrage:

    Code
    $q = "SELECT   `username`, `score`, `time`
          FROM     `highscores`
          WHERE    `nid` = '" . mysql_real_escape_string($node->nid) . "'
          ORDER BY `score` DESC
          LIMIT    0,10";

    Ausgegeben wird jeweils der Username, seine Punktezahl und das Datum, beginnend mit der höchsten Punktezahl. Soweit so richtig, leider werden die User so mehrfach ausgegeben. Ich würde gerne erreichen, dass jeder User nur einmal in der Liste auftaucht und zwar nur mit seiner höchsten Punktzahl.

    Da die Liste ja ohnehin mit der höchsten Punktzahl beginnt, sollte es am einfachsten sein, wenn Zeilen mit Usern die bereits abgefragt wurden einfach übersprungen werden, bis die Top-10 voll ist. Oder was meint ihr?

    Und wenn das der beste Weg ist, wie ist dann die Lösung?

    Gruß,
    Uwe

  • Probiers mal mit "SELECT DISTINCT". Wenns nicht geht, gib mal ein Beispieldatensatz dann probier ichs selbst ma aus ;)

    Die genaue Syntax musst dir leider selbst ergooglen, bei einem Wert könnt ichs dir noch sagen - aber derzeit keine Lust weiterzusuchen ^^"

  • Danke, das ist es. Habe jetzt einfach

    Code
    GROUP BY `username`

    vor ORDER BY gesetzt und fertig. Ich hätte nicht gedacht, dass das so leicht sein kann.

    Gruß,
    Uwe

  • Das war es dann doch nicht so ganz, habe die Lösung aber nun gefunden.

    Mit einem Subquery muss erstmal die höchste Punktzahl des Users ermittelt werden, dann schaut das Ganze so aus:

    PS: Ist mir nicht selbst eingefallen, ich versteh davon ja kaum was, aber es klappt einwandfrei.

    Gruß,
    Uwe