diff --git a/cache_data.go b/cache_data.go index b0969f933f5513317c06341b7b74f8dcd0a81551..114ea32a193c2eb7a3003d9a81cf636447dc74ec 100644 --- a/cache_data.go +++ b/cache_data.go @@ -16,7 +16,14 @@ type s struct { func opCacheData() { // get data - const fetchQuery = `SELECT users.id as user_id, users.username, scores.play_mode, scores.score, scores.completed, scores.300_count, scores.100_count, scores.50_count FROM scores LEFT JOIN users ON users.username=scores.username WHERE users.allowed = '1'` + const fetchQuery = ` + SELECT + users.id as user_id, users.username, scores.play_mode, + scores.score, scores.completed, scores.300_count, + scores.100_count, scores.50_count + FROM scores + LEFT JOIN users ON users.id=scores.userid + WHERE users.allowed = '1'` rows, err := db.Query(fetchQuery) if err != nil { queryError(err, fetchQuery) diff --git a/calculate_pp.go b/calculate_pp.go index 8a245927aae0f79cb4d3e5f2e1fa1a4a1d763a74..081d74817ecf056759c9fac687a5db7ce6ed49cc 100644 --- a/calculate_pp.go +++ b/calculate_pp.go @@ -13,14 +13,14 @@ type ppUserMode struct { } func opCalculatePP() { - const ppQuery = "SELECT scores.username, pp, scores.play_mode FROM scores LEFT JOIN users ON users.username=scores.username WHERE completed = '3' AND users.allowed = '1' ORDER BY pp DESC" + const ppQuery = "SELECT scores.userid, pp, scores.play_mode FROM scores LEFT JOIN users ON users.id=scores.userid WHERE completed = '3' AND users.allowed = '1' ORDER BY pp DESC" rows, err := db.Query(ppQuery) if err != nil { queryError(err, ppQuery) return } - users := make(map[string]*ppUserMode) + users := make(map[int]*ppUserMode) var count int for rows.Next() { @@ -28,30 +28,30 @@ func opCalculatePP() { fmt.Println("> CalculatePP:", count) } var ( - username string + userid int ppAmt float64 playMode int ) - err := rows.Scan(&username, &ppAmt, &playMode) + err := rows.Scan(&userid, &ppAmt, &playMode) if err != nil { queryError(err, ppQuery) continue } - if users[username] == nil { - users[username] = &ppUserMode{} + if users[userid] == nil { + users[userid] = &ppUserMode{} } - if users[username].countScores > 100 { + if users[userid].countScores > 100 { continue } - currentScorePP := round(round(ppAmt) * math.Pow(0.95, float64(users[username].countScores))) - users[username].countScores++ - users[username].ppTotal += int(currentScorePP) + currentScorePP := round(round(ppAmt) * math.Pow(0.95, float64(users[userid].countScores))) + users[userid].countScores++ + users[userid].ppTotal += int(currentScorePP) count++ } rows.Close() - for username, ppUM := range users { - op("UPDATE users_stats SET pp_std = ? WHERE username = ?", ppUM.ppTotal, username) + for userid, ppUM := range users { + op("UPDATE users_stats SET pp_std = ? WHERE id = ?", ppUM.ppTotal, userid) } color.Green("> CalculatePP: done!") diff --git a/fix_score_duplicates.go b/fix_score_duplicates.go index 094771ae0e077f9a373cf72be1e49a423b1ce085..79aa37b1a522b7d298db795b98d5fa154632b3b9 100644 --- a/fix_score_duplicates.go +++ b/fix_score_duplicates.go @@ -9,7 +9,7 @@ import ( type score struct { id int beatmapMD5 string - username string + userid int score int maxCombo int mods int @@ -19,7 +19,7 @@ type score struct { func (s score) sameAs(t score) bool { return s.beatmapMD5 == t.beatmapMD5 && - s.username == t.username && + s.userid == t.userid && s.score == t.score && s.maxCombo == t.maxCombo && s.mods == t.mods && @@ -28,7 +28,7 @@ func (s score) sameAs(t score) bool { } func opFixScoreDuplicates() { - const initQuery = "SELECT id, beatmap_md5, username, score, max_combo, mods, play_mode, accuracy FROM scores WHERE completed = '3'" + const initQuery = "SELECT id, beatmap_md5, userid, score, max_combo, mods, play_mode, accuracy FROM scores WHERE completed = '3'" scores := []score{} rows, err := db.Query(initQuery) if err != nil { @@ -40,7 +40,7 @@ func opFixScoreDuplicates() { rows.Scan( ¤tScore.id, ¤tScore.beatmapMD5, - ¤tScore.username, + ¤tScore.userid, ¤tScore.score, ¤tScore.maxCombo, ¤tScore.mods, @@ -56,13 +56,13 @@ func opFixScoreDuplicates() { remove := []int{} var ops int64 for i := 0; i < len(scores); i++ { - if ops%10000 == 0 { - fmt.Println("> FixScoreDuplicates:", ops) - } if contains(remove, scores[i].id) { continue } for j := i + 1; j < len(scores); j++ { + if ops%5000000 == 0 { + fmt.Println("> FixScoreDuplicates:", ops) + } if scores[i].sameAs(scores[j]) && !contains(remove, scores[j].id) { fmt.Println("> FixScoreDuplicates: found one!") remove = append(remove, scores[j].id)