ORDER BY Frage ?!

91ervans

Benutzer
Beiträge
8
Hallo liebe Community,

wie der Titel schon sagt hab ich da eine Frage über "Order by" .

Undzwar hab ich ein Ranking das die ersten 300 Spieler listet:
Code:
$selectchars = mssql_query('SELECT TOP '.$count.' * FROM dbo.Character where name not like "%@%" and permission = 0 and lv > 0 ORDER BY EXP DESC');

Das klappt auch wunderbar ;) .

Jetzt wollte ich für diese Liste aber eine kleine Änderung vornehmen.
Undzwar soll die Liste nun so aufgebaut werden:

Ranking:

Spieler 1 - Spieler 100

Spieler 101 - Spieler 200

Spieler 201 - Spieler 300


Also möcht ich gern von euch wissen wie ich das machen kann das "Order by" die ersten 100 bzw. 200 Plätze überspringt ?

MfG 91ervans
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.582
Das ist leider speziell in MS SQL etwas blöd zu lösen da es mit TOP allein nicht geht. Die simple Variante müsste so aussehen:
Code:
SELECT    TOP 100 *
FROM    dbo.Character
WHERE    name NOT LIKE "%@%"
AND        permission = 0
AND        lv > 0
AND        id NOT IN (    SELECT    TOP 100 id
                    FROM    dbo.Character
                    WHERE    name NOT LIKE "%@%"
                    AND        permission = 0
                    AND        lv > 0
                    ORDER BY EXP DESC )
ORDER BY EXP DESC
Wobei dann halt die Unterabfrage die 100, 200 oder 300 vorhergehenden Einträge ausschließt.

Die eleganteste Lösung die ich kenne arbeitet mit ROW_NUMBER()
Code:
SELECT    *
FROM    (    SELECT    ROW_NUMBER() OVER (ORDER BY EXP DESC) AS nr,
                    *
            FROM    dbo.Character
            WHERE    name NOT LIKE "%@%"
            AND        permission = 0
            AND        lv > 0 ) tabelle
WHERE    nr BETWEEN 101 AND 200

In anderen SQL Varianten wie z.B. MySQL geht es mit LIMIT, das unterstüzt MS aber leider nicht.
 
Werbung:
Oben