Hallo,
ich habe eine Tabelle 'statistics' in dieser gibt es die felder: pid, sid, val (player id, statistics id, value).
die Statistiks id gibt die statistik an, also die id 10 sind z.B. die gesamtkills und die id 11 sind gesamttode.
Wenn man die beiden teilt erhält man die sogenannte k/d ratio.
Nun möchte ich die playerid erhalten die, welche die höchste k/d hat... ...
Wie mache ich das am besten?
Ich hoffe ich habe mich deutlich genug ausgedrückt.
Danke im voraus.
Ankündigung
Einklappen
Keine Ankündigung bisher.
MySQL komplexe Abfrage
Einklappen
Neue Werbung 2019
Einklappen
X
-
Zitat von tkausl Beitrag anzeigenIch denke, alleine die Arbeit die die Datenbank mit dem erstellen des Index' hat ist höher als die Abfrage ohne Index...
Der Aufwand für die Erstellung des Index dürfte dagegen nur linear zunehmen.
Es sollte also irgendwo ein Schnittpunkt geben, ab dem sich die Erstellung einer 2.Tabelle mit index lohnt.
Da dies auch meine aktuellen Probleme tangiert, hab ich mal einen kleinen Test gemacht:
Code:10³row SELECT Create INSERT ALTER SELECT tmp Summe tmp ----------------------------------------------------------------------- 17 1,1 0,05 0,2 0,31 0,08 0,64 30 3,4 0 0,3 0,5 0,14 0,94 41,4 6,5 0,02 0,4 0,65 0,2 1,27 52,8 10,6 0,02 0,5 0,81 0,27 1,51
Code:Select_Sekunden = 3.87231895·10-3 * (10³row)²- 4.890441034·10-3 * (10³row) + 6.34843982·10-2
Die Messwerte stärken meine obigen Vermutungen.
LG jspit
-
Zitat von jspit Beitrag anzeigenFrage von mir dazu:
Angenommen, ich darf oder möchte zur Tabelle keinen Index zufügen, warum auch immer.
Wäre dann dies eine Möglichkeit mit einem Index dennoch zu arbeiten?
Code:CREATE TEMPORARY TABLE tmp LIKE statistics INSERT tmp SELECT * FROM statistics; ALTER TABLE tmp ADD INDEX `pid` (`pid`);
Einen Kommentar schreiben:
-
Zitat von Killerjo96 Beitrag anzeigenEdit: Was soll diese Query jetz zurückgeben, die höchste k/d oder die pid?
Ich möchte die pid xD Hat jetz einmal funktioniert.
Code:SELECT s1.pid, (s1.val / s2.val) as kd ...
Angenommen, ich darf oder möchte zur Tabelle keinen Index zufügen, warum auch immer.
Wäre dann dies eine Möglichkeit mit einem Index dennoch zu arbeiten?
Code:CREATE TEMPORARY TABLE tmp LIKE statistics INSERT tmp SELECT * FROM statistics; ALTER TABLE tmp ADD INDEX `pid` (`pid`);
Einen Kommentar schreiben:
-
Zitat von Killerjo96 Beitrag anzeigenWahrscheinlich ist es dann einfach nicht möglich...
Einen Kommentar schreiben:
-
Zitat von Killerjo96 Beitrag anzeigenOkey, das ausführen dauert solange, dass php die operation abbricht.
Einen Kommentar schreiben:
-
Okey, das ausführen dauert solange, dass php die operation abbricht.
Es sind 65252 Spieler in der Datenbank... und es gibt für jeden Spieler ~1500 verschiedene Statistiken.
Am php server kann ich allerdings überhaupt nichts ändern, ich habe nur select rechte...
Wahrscheinlich ist es dann einfach nicht möglich...
Trotzdem danke...
Edit: Was soll diese Query jetz zurückgeben, die höchste k/d oder die pid?
Ich möchte die pid xD Hat jetz einmal funktioniert.
Einen Kommentar schreiben:
-
Versuchs damit:
Code:SELECT (s1.val / s2.val) as kd FROM statistics s1 LEFT JOIN statistics s2 ON (s1.pid = s2.pid) WHERE s1.sid = 10 AND s2.sid = 11 ORDER BY kd DESC
Einen Kommentar schreiben:
Einen Kommentar schreiben: