PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeilennummern in result-set



phoku
19-01-2006, 17:08
Hi,

ich habe eine Liste, die mit ORDER BY geordnet ist. Genau gesagt, handelt es sich um eine Rangliste (Auswertung eines Spiels). Ich suche nach einer Möglichkeit, wie ich die einzelnen Ränge mit in das result-set reinbekomme.

SELECT platz, spieler,punkte FROM tb_plaetze ORDER BY punkte ASC;
soll etwas ergeben wie:

+-------+----------+-------+
| platz | spieler | punte |
+-------+----------+-------+
| 1 | matthias | 50027 |
| 2 | anne | 49168 |
| 3 | doro | 41000 |
| 4 | rookie | 30000 |
+-------+----------+-------+
Bin für jede Hilfe dankbar!

mfg
phoku

ninguno
19-01-2006, 17:48
SELECT platz, spieler,punkte FROM tb_plaetze ORDER BY punkte ASC;ich nehme mal an platz ist keine spalte in deiner tabelle?

in oracle geht sowas mit der rownum pseudo spalte.

phoku
19-01-2006, 17:52
ich nehme mal an platz ist keine spalte in deiner tabelle?
ja genau. nur leider benutze ich mysql in version 4 und kein oracle. gibt es entsprechendes auch dort?

phoku
19-01-2006, 17:58
mysql> SET @rownum := 0;
mysql> select @rownum := @rownum + 1 AS rank, benutzerkennung from tb_platzierungen;

das funktioniert, aber nur fast... sobal ich noch ein LIMIT in das select einsetzt, tut's das nicht mehr

michael.sprick
19-01-2006, 18:55
sollte eigentlich auch gehen - hast Du evtl. vergessen @rownum vorher wieder auf 0 zu setzen? So, dass er jetzt einfach weitergezählt hat?



SET @rownum:=0;
SELECT @rownum := @rownum+1 as rank, benutzerkennung,..... LIMIT 0,5;
SET @rownum:=0;

RHBaum
20-01-2006, 13:18
Wieso brauchst du das eigentlich "raw" von der Datenbank ?

Hasst du kein script / kein programm dazwischen was dir das nummerieren abnehmen kann ?

Das Reine Standard ANSI SQL (95) kanns ned, da gibts keine "variablen" glaub ich.

Aber wenn du m it was DB spezifischem leben kannst ..... (btw Autonum iss auch DB spezifisch, das gibts aber bei mehreren DBMS, da gaenge vielleicht was mit ner temp tabelle ) ... is obige Loesung sicher praktikabel.

Ciao ...