Aloa Wald,
klar, es ist ggf. nicht das richtige Forum für Programmierfragen, aber von einigen weiß ich ja, dass ihr Programmierer seid.
Ich habe folgendes Problem.
Ich habe eine Datenbank, in der User-IDs mitsamt der zugehörigen Gesamtpunktzahl des Users abgespeichert sind. Ich möchte nun zum Besipiel wissen, welchen Ranglistenplatz der User mit der ID 17 hat.
Momentan sieht die Funktion dazu wie folgt aus:
function hol_rangpos($id) {
$pos=0;$u=-1;
$sql = "SELECT Id FROM fa_0_user ORDER BY Punkte DESC";
$ergebnis = mysql_query($sql);
while($u!=$id && ($row = mysql_fetch_object($ergebnis))) {
$u = $row->Id;
$pos=$pos+1;
}
return $pos;
}
Alles anzeigen
Ergo geht das Skript von Platz 1 alle User durch und zählt dabei die Position hoch.
Nun haben wir mittlerweile über 1.000 User in drei Ligen - und wollen jetzt richtig Ligen erweitern, also die Userzahl vervielfachen. Nun wird die Funktion natürlich immer langsamer, da sie (zB bei neuregistrierten Usern) immer mehr "falsche" User durchgehen muss, dessen Daten ich gar nicht weiter verarbeite.
Gibt es also einen php-Befehl, um die Position des Treffers in der Ergebnisliste ausfindig zu machen?
Also sowas wie
function hol_rangpos($id) {
$sql = "SELECT Id FROM fa_0_user ORDER BY Punkte DESC LIMIT 1";
$ergebnis = mysql_query($sql);
while($row = mysql_fetch_object($ergebnis)) {
$pos=???; //DER WIEVIELTE WERT IST DAS JETZT GERADE??
}
return $pos;
}
Herzlichen dank fürs Lesen, ichbin für jeden Tipp dankbar..
PS: Mit "LIMIT 1" ist mein Hauptproblem, dass es praktisch gar keine Ergebnisliste gibt. Ergo kann ich da auch keine Positionen bestimmen.. Jemand ne Idee?
Grüße, IP