Entwickler-Ecke

Datenbanken - Select - Wie Ergebnismenge nummerieren?


motion - Sa 26.01.08 16:22
Titel: Select - Wie Ergebnismenge nummerieren?
Ich brauche in der Ergebnismenge eines Selects, als erste Spalte eine Zeilennummerierung, also 1...rowcount.

Wie läßt sich sowas am einfachsten und besten realisieren?

SQL-Anweisung
1:
Select "Nr",* from tabelle where option=1                    


und die Funktion "Nr" sollte den aufsteigenden Integer ergeben.


icho2099 - Sa 26.01.08 19:57

soweit ich SQL kenne, geht das nicht.
SELECT liefert nur die Spalten, nach denen du fragst.
Und du kannst nur nach Spalten fragen, die in der/den Tabellen enthalten sind.

Mit einer Delphi Komponente, die das Select ausführt und zusätzlich noch
eine eigene, kalkulierte Spalte hat, könntest du das evtl. erreichen.

OnCalcFields erstellen

FieldByName(myCalcField).AsInteger := Zeilenzähler;
Inc(Zeilenzähler)

Zeilenzähler auf Null setzen,

SELECT ausführen.

Aber: wenn du dann in der Ergebnismenge navigieren willst, musst du immer
bei FIRST anfangen und vorher Zeilenzähler auf NULL setzen.
Und nur vorwärts navigieren.


motion - So 27.01.08 00:23

Hallo,
leider muss der SQL direkt auf dem Server laufen (in einem Webshop); keine Möglichkeit das mit Delphi Code anzureichern.

Aber ich habe nach einiger Recherche diese Möglichkeit für MySql gefunden:

SQL-Anweisung
1:
2:
3:
4:
set @cnt:=0;
select
@cnt:=(@cnt+1),a.*
from db.artikel a;


Funktioniert ganz gut ...