Mastodon

renephoenix.de

Position ermitteln

Folgende Situation: ich habe eine kleine Telefondatenbank, d.h. eine Tabelle mit Namen und Rufnummern. Gegeben sei nun der Name Fritz (zur Vereinfachung: der Name ist eindeutig). Ich möchte wissen, an welcher Position er steht, wenn ich die Liste nach Namen sortiere. Im mysql-Handbuch bin ich nicht fündig geworden.

Bisherige Kommentare (5)

Kommentar von Garvin

Probier mal:

SET @counter:=0;
SELECT @counter=:(@counter+1), nachname FROM telefonbuch;

Und daran denken, dass wenn Du die Query mehrfach absetzt, du vorher den Counter immer wieder auf 0 setzen musst.

(Getested mit MySQL 4.0.13 — wie SQL-portabel so eine Lösung ist, möchte ich nicht beurteilen ;-)

Kommentar von Martin Ringehahn

Um strings in eine Reihenfolge zu bringen muss mysql sie doch bestimmt in irgendeine Metrik zwingen. Kann man sich die nicht irgendwie zunutze machen um dann eine Abfrage aehnlich zu der:

select count(*) from telefonbuch where name < 'Schulz';

zu gestalten?

Kommentar von Tomek

Es würde auch mit verschatelten Abfragen funktionieren (nicht getestet):
select count(*) from (select name from telefonbuch where name <= 'Fritz')
D.h. sortiere das Telefonbuch und gibt alles bis zum Fritz in eine temporäre Tabelle, deren Ausgabe einfach durchgezählt wird.

Kommentar von Thiemo

Das kommt mir verdammt bekannt vor: Das selbe Problem hatte ich in eine Datenbanken-Klausur eingebaut. Bei mir ging es um Wettkampfergebnisse, wobei ich aus der erzielten Zeit die Platzierung ermitteln möchte. Meine Lösung ist ein (Standard-konformes) Self-JOIN:

SELECT t.nachname, COUNT(kleinere.nachname) + 1 AS position
FROM telefonbuch AS t
LEFT OUTER JOIN telefonbuch AS kleinere
ON t.nachname > kleinere.nachname
GROUP BY t.nachname
ORDER BY t.nachname;

Mit einem Sub-SELECT lässt sich eine äquivalente Lösung konstruieren. Der Self-JOIN ist allerdings cooler. ;-)

Kommentar verfassen

Freiwillige Angabe
Freiwillige Angabe
Der Text kann mit Textile formatiert werden, z.B. *fett* _kursiv_ "link":url. Wie das geht?
Wieviel ist 40 plus 2?

Bisherige Trackbacks (0)

Es wurde noch kein Trackback empfangen!