mysql: Rang herrausfinden |
Tobi W.
Mausakrobat Threadstarter
Beiträge: 182 |
Hallo,
gibt es eine Möglichkeit mit SQL den Rang herrauszufinden.
Beispielsweise hat man bei einer Liga eine Sortierung nach
1. Punkte
2. Torverhältnis (kann auch wenn nicht anders möglich fest in der Tabelle stehen)
Gibt es jetzt eine einfache Möglichkeit den Rang einer bestimmten Mannschaft herrauszufinden, ohne das man gleich die ganze Tabelle durchgeht und zählt. Das wäre bei vielen Einträgen ein bisschen doof.
Danke,
Gruß
Tobi
---
tobi.weinhorst
|
 Profil
Website
Editieren
Zitieren
|
dee123
Otto-Normal-Poster
Beiträge: 63 |
Hi,
wenn du den Rang bzw. die Punkte von Hand einträgst:
1: | "select (*) FROM tabelle ORDER BY Punkte ASC (oder DESC)" |
ASC oder DESC = aufsteigender oder absteigender Reihenfolge
---
Meine alte Signatur gefiel mir nicht mehr. Darum hab ich jetzt eine neue.
Diese Nachricht wurde geändert von: dee123 |
 Profil
Website
Editieren
Zitieren
|
Tobi W.
Mausakrobat Threadstarter
Beiträge: 182 |
Der Rang wird nicht in der Tabelle gespeichert, sonder soll ausgegeben werden.
Deine Idee bringt mich da leider nicht weiter, aber danke.
---
tobi.weinhorst
|
 Profil
Website
Editieren
Zitieren
|
chip
Foren-Team
Beiträge: 419 |
Lass die Datensätze wie angegeben sortieren und füge deiner Schleife zum Auslesen eine Zählvariable zu, die bei jedem Durchlauf um 1 erhöht wird und gib sie per echo() aus.
Wenn ich dich richtig verstanden habe, willst du nur eine einfache Nummer ausgeben, die jeweils um 1 erhöht wird. Ansonsten poste nochmal, was du GENAU meinst.
---
|
 Profil
Website
Editieren
Zitieren
|
languitar
Foren-Team
Beiträge: 2795 |
Ich glaube er sucht ne direkte Möglichkeit das mit MySQL berechnen zu lassen, aber ne wirkliche Idee hab ich gerade auch nicht.
|
 Profil
Editieren
Zitieren
|
Tobi W.
Mausakrobat Threadstarter
Beiträge: 182 |
languitar hat Recht. Ich möchte es einfach direkt haben. Ähnlich wie mit COUNT - da läßt ja auch niemand die durchrattern und zählt mit.
Wenn ich erst tausende von Datensätzen (wenn auch nicht die komplette Zeile) durchrattern muss um den Rang zu bestimmen, dann zieht das ganz schön am Server. Vor allem, weil es ja jedesmal gemacht werden muss.
Ist ja schon ein bisschen doof.
---
tobi.weinhorst
Diese Nachricht wurde geändert von: Tobi W. |
 Profil
Website
Editieren
Zitieren
|
chip
Foren-Team
Beiträge: 419 |
Naja, wenn du die Datensätze sowieso in einen Array einliest, kannst du ja einfach den Array-Key ausgeben, wenn er numerisch ist (+1 natürlich).
---
|
 Profil
Website
Editieren
Zitieren
|
languitar
Foren-Team
Beiträge: 2795 |
Das ist aber unnützer Datenmüll.
|
 Profil
Editieren
Zitieren
|
chip
Foren-Team
Beiträge: 419 |
languitar schrieb am 12.05.2006 19:57
Das ist aber unnützer Datenmüll. |
Wieso? Er will die Daten ja früher oder später sowieso ausgeben. Das einzige Problem ist, wenn er aus der Mitte irgendwelche Datensätze rausholen will, denn dann würde ja der Index wieder bei 0 beginnen.
---
|
 Profil
Website
Editieren
Zitieren
|
Tobi W.
Mausakrobat Threadstarter
Beiträge: 182 |
Es ist Datenmüll. Ich würde unmengen an Daten rumladen für eine solch simples ergebnis.
Wenn es nur eine Bedingung wäre, dann wäre es ja kein Problem.
"Select COUNT(*) tbl WHERE Punkte > $punkte_spieler"
Da es aber bei Punktgleichheit auf das Torverhältnis ankommt klappt es nicht, oder besser gesagt ich weiss nicht wie.
---
tobi.weinhorst
|
 Profil
Website
Editieren
Zitieren
|
flipflop
Otto-Normal-Poster
Beiträge: 62 |
das geht doch dann relativ einfach
zähle die Anzahl der Ergebnisse für die Abfrage
1:
2:
3: |
"Select COUNT(*) tbl WHERE Punkte > $punkte_spieler"
|
mit mysqlnumrows (?) schau nochmal nach der richtigen schreibweise
Wenn das Ergebnis >= 2 ist
dann { brechne Torverhältnis oder steht das in der Datenbank und echo die Reihe wo am besten ist }
oder soll es reines SQl sein?
---
http://alles-ausser-banane.de/
|
 Profil
Website
Editieren
Zitieren
|
Tobi W.
Mausakrobat Threadstarter
Beiträge: 182 |
Gute Idee flipflop,
aber ich bin noch auf eine bessere Gekommen. Mit nur einen SQL
Guckste hier:
1: | "Select COUNT(*) tbl WHERE (Punkte > $punkte_spieler) OR (Punkte = $punkte_spieler AND Torverhaeltnis > $torverhaeltnis_spieler)" |
Das gute ist, dass man es so recht weit erweitern kann.
Das ich da nicht schon früher drauf gekommen bin....
(Herraus kommt die Anzahl der Spieler, die vor dem Spieler X sind - also evtl. noch +1 rechnen um auf den Platz zu kommen.)
---
tobi.weinhorst
Diese Nachricht wurde geändert von: Tobi W. |
 Profil
Website
Editieren
Zitieren
|
chip
Foren-Team
Beiträge: 419 |
Tobi W. schrieb am 16.05.2006 09:51
Gute Idee flipflop,
aber ich bin noch auf eine bessere Gekommen. Mit nur einen SQL
Guckste hier:
1: | "Select COUNT(*) tbl WHERE (Punkte > $punkte_spieler) OR (Punkte = $punkte_spieler AND Torverhaeltnis > $torverhaeltnis_spieler)" |
Das gute ist, dass man es so recht weit erweitern kann.
Das ich da nicht schon früher drauf gekommen bin....
(Herraus kommt die Anzahl der Spieler, die vor dem Spieler X sind - also evtl. noch +1 rechnen um auf den Platz zu kommen.) |
Achso, ich dachte, Du willst es unbedingt ohne, dass das Torverhältnis in der Tabelle steht haben.
Na dannnnn, ist es ja gaaanz einfach .
---
|
 Profil
Website
Editieren
Zitieren
|
Tobi W.
Mausakrobat Threadstarter
Beiträge: 182 |
Hab ich aber gleich im ersten Posting geschrieben.
Jetzt sagen, dass es ganz einfach ist hätteste dann ja schon vorher den Ansatz bringen können
---
tobi.weinhorst
Diese Nachricht wurde geändert von: Tobi W. |
 Profil
Website
Editieren
Zitieren
|
chip
Foren-Team
Beiträge: 419 |
Klar. War auch nur als Scherz gemeint. Ehrlich gesagt, hatte ich schon von Anfang an nicht genau gewusst, was Du meinst/willst. Aber jetzt hast Du die Lösung ja gefunden.
---
Diese Nachricht wurde geändert von: chip |
 Profil
Website
Editieren
Zitieren
|