MySQL Rang eines Listenelements bestimmen

Gast #2253530
Ich habe eine Liste die sich durch folgendes Statement ergibt:
1
SELECT * FROM stat ORDER BY won DESC, lost ASC, draw ASC, user_id ASC

Wie kann ich das Statement erweitern so dass ich den konkreten Rang in 
dieser Liste einer konkreten 'user_id' erhalte? user_id ist der 
Primärschlüssel.
Ich komme nicht drauf wie, bin mir aber relativ sicher dass sowas 
möglich ist ohne die ganze Liste durchzuiterieren.
Gast #2253559
Läubi .. schrieb:
> Was meinst du mit Rang?

Der wievielte Platz man in dieser Liste ist.

>
> hier:
> http://www.eggheadcafe.com/community/aspnet/13/10015707/row-id-in-mysql-50.aspx
> wird als Lösung vorgeschlagen:
>
1
SET @rownum :=0;
2
> SELECT @rownum := @rownum + 1 AS Rang, * FROM stat ORDER BY won DESC,
3
> lost ASC, draw ASC, user_id ASC;
>
> Ähnliche Frage: http://forums.mysql.com/read.php?20,192721,235791

Das wäre die Iterationslösung.

Ich meinte aber eher sowas wie

http://www.fachinformatiker.de/datenbanken/95143-mysql-rangplatz-rangliste-ermitteln.html#post890905

allerdings verstehe ich nicht wie ich das auf eine sortierte Liste wie 
meine anwende
Gast #2253583
Ok ich habs jetzt erstmal so gelöst:
1
SET @rownum :=0;
2

3
SELECT t.rang FROM (SELECT @rownum := @rownum + 1 AS rang, user_id FROM stat ORDER BY won DESC, lost ASC, draw ASC, user_id ASC) t WHERE t.user_id = '32';

Wenn jemand was besseres (== performanteres) für größere Datenmengen 
kennt, bin ich aber für Vorschläge offen
Gast #2253777
So jetzt hab ich ein Statement mithilfe von selfjoin rausgeknobelt:
1
SELECT 
2
  COUNT (s1.user_id) as rank
3
FROM
4
  stat s1, stat s2
5
WHERE 
6
  (s1.won < s2.won) OR
7
  (s1.won = s2.won AND s1.lost > s2.lost) OR
8
  (s1.won = s2.won AND s1.lost = s2.lost AND s1.draw > s2.draw) OR
9
  (s1.won = s2.won AND s1.lost = s2.lost AND s1.draw = s2.draw AND s1.user_id >= s2.user_id)
10
GROUP BY s1.user_id
11
HAVING s1.user_id = '...';
Gast #2255323
Läubi .. schrieb:
> Hast du dir auch im QUeryplan angeschaut dass das performanter ist?

Wo sieht man das nach?

> In den allermeisten Fällen ist es vermutlich eh einfacher den "Platz"
> einfach bei der Ausgabe dranzuhängen.

Ja so mache ich das auch für die ganze Rangliste.

Wenn mich aber nur ein konkretes Element interessiert, dachte ich geht 
das evtl. besser

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.