void ArenaTeamMgr::LoadArenaTeams() { uint32 oldMSTime = getMSTime(); // Clean out the trash before loading anything CharacterDatabase.Execute("DELETE FROM arena_team_member WHERE arenaTeamId NOT IN (SELECT arenaTeamId FROM arena_team)"); // One-time query // 0 1 2 3 4 5 6 7 8 QueryResult result = CharacterDatabase.Query("SELECT arenaTeamId, name, captainGuid, type, backgroundColor, emblemStyle, emblemColor, borderStyle, borderColor, " // 9 10 11 12 13 14 "rating, weekGames, weekWins, seasonGames, seasonWins, rank FROM arena_team ORDER BY arenaTeamId ASC"); if (!result) { sLog->outString(">> Loaded 0 arena teams. DB table `arena_team` is empty!"); sLog->outString(); return; } QueryResult result2 = CharacterDatabase.Query( // 0 1 2 3 4 5 6 7 8 9 10 "SELECT arenaTeamId, atm.guid, atm.weekGames, atm.weekWins, atm.seasonGames, atm.seasonWins, c.name, class, personalRating, matchMakerRating, maxMMR FROM arena_team_member atm" " INNER JOIN arena_team ate USING (arenaTeamId)" " LEFT JOIN characters AS c ON atm.guid = c.guid" " LEFT JOIN character_arena_stats AS cas ON c.guid = cas.guid AND (cas.slot = 0 AND ate.type = 2 OR cas.slot = 1 AND ate.type = 3 OR cas.slot = 2 AND ate.type = 5)" " ORDER BY atm.arenateamid ASC"); uint32 count = 0; do { ArenaTeam* newArenaTeam = new ArenaTeam; if (!newArenaTeam->LoadArenaTeamFromDB(result) || !newArenaTeam->LoadMembersFromDB(result2)) { newArenaTeam->Disband(NULL); delete newArenaTeam; continue; } AddArenaTeam(newArenaTeam); ++count; } while (result->NextRow()); sLog->outString(">> Loaded %u arena teams in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); sLog->outString(); }