Moin!
Wozu dies? MySQL kann doch auch direkt bei der Abfrage sortieren.
Hallo... das schon, aber nur temporaer, das heisst das bei jeder Abfrage die Tabelle sortiert wird. Sehr ineffektiv bei 5000 User oder so, die theoretisch alle gleichzeitig die Tabelle sortieren lassen koennten.
Sprich bitte nicht von "ineffektiv" bei so winzigen Datensatzzahlen!
Abgesehen davon: Wenn du nur einmal in 24 Stunden sortierst - was ist dann in der Zwischenzeit, wenn sich Punktezahlen mal ändern? Oder existiert dieser Fall nicht?
Zähl bei der Ausgabe mit, wieviele Datensätze du schon ausgegeben hast. Diese Info stellt dir die Datenbank nicht zur Verfügung.
Auch das ist sehr ineffektiv, da der 5000. User dann eine Zaehlschleife von 5000 Runden haette... obwohl ich nur wissen will das es der 5000. Eintrag ist.
Wenn du alle 5000 User ausgibst, mußt du ja sowieso die 4999 davor auch zählen. Wenn du nur einen selektiven Ausschnitt (4990 - 5000) abfragst, kannst du den Offset vorbelegen.
Und wenn du tatsächlich nur an einem einzigen Datensatz interessiert bist, kannst du dessen Positionierung natürlich auch aus der Datenbank abfragen, indem du die Anzahl der Datensätze ausgeben läßt, die mehr Punkte haben als der gefragte User.
Ok... wenn das nicht gehen sollte, dann sollte sich jemand mit Erfahrung und Wissen daran machen, solch eine Funktion zu bauen.
Datenbanken verwalten absichtlich unsortierte Datenbestände, die nur im Bedarfsfall sortiert werden. Insofern existiert kein "der erste Datensatz", weil das je nach Sortierung und Abfragebedingungen jeder Datensatz sein könnte. Je größer die Datenmengen, desto uninteressanter wird diese Fragestellung auch - bei Ranglisten natürlich nicht. Deshalb aber in Datenbanken spezielle Funktionen einzubauen, die einfach nur zählen, wäre irgendwie blöd. Zumal die ja auch nichts anderes machen können, als von 1 loszuzählen und bei 5000 oder 5 Millionen anzukommen, auch wenn du nur den 5millonsten Eintrag haben wolltest.
- Sven Rautenberg
"Love your nation - respect the others."