Mailinglisten-Archive |
Hallo, Wollte mal eure Meinung zu folgendem UPDATE statement hören... Es geht um highscores (player zu game), wo ich zu jedem spieler zu jedem game einen Score speichere. Ich will aber jederzeit den Rank in der Liste haben, deshalb will ich per Cronjob die Listen updaten und die Ranks neu berechnen. Das mache ich folgendermaßen (Für Game 100): Tabelle highscores: player_id INT game_id INT rank INT rank_tendency ENUM (up, down, hold) ########################################### SET @rank = 0; SET @last_score = -1; UPDATE highscores SET rank_tendency = IF(@last_score != score AND @rank := @rank + 1, 1, 1), rank_tendency = IF(@last_score := score, 1, 1), rank_tendency = IF(@rank > rank, 'up', IF(@rank < rank, 'down', 'hold')), rank = @rank WHERE game_id = 100 ORDER BY score DESC; ########################################### Beschreibung: rank variable auf 0 last_score auf -1 Update alle Scores zu Spiel 100 in ugekehrter Reihenfolge des Punktestandes (ORDER BY score DESC) Pro Zeile: setze "rank_tendency" auf 1 - um @rank hochzuzaehlen wenn @last_score ungleich dem aktuellem score ist setze "rank_tendency" auf 1 - um @last_score auf den aktuellen score zu setzen setze "rank_tendency" auf den richtigen ENUM, jenachdem ob @rank groesser, kleiner oder gleich dem aktuellen rank ist setze rank auf @rank Was mir nicht gefaellt ist dass ich die redundanten updates auf "rank_tendency" machen muss, nur um die Variablen zu veraendern... waere toll, wenn das auch anders ginge... Gruesse, Ilja -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive