Ranglisten per MySQL - Druckversion +- PHP Rocks (https://www.php-rocks.de) +-- Forum: Knowledge Base (https://www.php-rocks.de/https://www.php-rocks.de/forum/18-knowledge-base.html) +--- Forum: Code Goodies (https://www.php-rocks.de/https://www.php-rocks.de/forum/21-code-goodies.html) +--- Thema: Ranglisten per MySQL (/https://www.php-rocks.de/thema/28-ranglisten-per-mysql.html) |
Ranglisten per MySQL - VPh - 22.03.2015 Hallo, es kommt ja ab und zu mal die Frage auf, wie man per MySQL und PHP eine Rangliste erstellen kann. Code und Queries sind hier zu finden: https://github.com/P-Voss/Ranglisten Code: -- Table structure for `persons` Verschiedene Möglichkeiten das Problem anzugehen, die ich kenne: Den Rang berechnen, indem andere Datensätze mit dem gleichen oder besseren Ergebnis gezählt werden Code: SELECT Vorteile
Nachteile
Die Liste nach dem Ergebnis sortieren und den Rang anhand der jeweiligen Zeilenzahl festlegen src: http://fellowtuts.com/mysql/query-to-obtain-rank-function-in-mysql/ Code: SELECT Vorteile
Nachteile
Ich habe die Abfragen noch nicht für größere Datenmengen getestet, weiß also nicht welche Version am Ende performanter sein könnte, bei meinen Testdaten hat die erste Version die Nase klar vorn. Beim deaktivierten Query-Cache verhalten sie sich in etwa gleich. *1 Im Git-Repository ist noch eine Query bei der die Punktzahl über mehrere 'Runden' pro Spieler summiert werden, sowie eine bei der diese Summierten Werte auch nochmal zum Team gruppiert werden. Ergänzungen, Korrekturen und Ideen wie immer erwünscht. Nachtrag: *1) Bei einer Datenmenge von ~300k Zeilen in der results-Tabelle ist die "berechnende" Variante immer noch schneller, sobald der Cache angelegt ist. Dauer der ersten Abfrage - ungecached Berechnende Query: ~1500 ms Zählende Query: ~250 ms Nächste Abfragen - gecached Berechnende Query: 0.15 bis 0.3 ms Zählende Query: ~250 ms |