Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

ORDER BY Frage ?!

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von 91ervans, 27 August 2012.

  1. 91ervans

    91ervans Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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.
     
  3. 91ervans

    91ervans Benutzer

    Das ist genau das was ich gesucht habe ^.^

    Danke dir ;)

    Lg 91ervans
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden