表概述

arena_team_member 表记录了每个竞技场战队中每位成员的个人竞技数据。一条记录代表一位玩家在某战队中的信息,包含其在战队中的个人等级分以及赛季和每周的参赛记录。

复合主键为 (arenaTeamId, guid)。arenaTeamId 关联 arena_team 表,guid 关联 characters 表的角色GUID。
每个角色可以在不同的战队中拥有独立的战绩数据(例如可以同时参加2v2和3v3战队)。

表结构

字段名类型默认值说明
arenaTeamIdint UNSIGNED0所属竞技场战队ID(复合主键)
guidint UNSIGNED0角色GUID(复合主键)
weekGamessmallint UNSIGNED0该成员本周总场次
weekWinssmallint UNSIGNED0该成员本周胜场数
seasonGamessmallint UNSIGNED0该成员本赛季总场次
seasonWinssmallint UNSIGNED0该成员本赛季胜场数
personalRatingsmallint0个人等级分(MMR)

实际案例

案例1:查询指定角色在所有战队中的战绩

-- 查询角色GUID=100的竞技场战绩 SELECT m.arenaTeamId, t.name AS team_name, t.type, m.personalRating, m.seasonGames, m.seasonWins, ROUND(m.seasonWins / m.seasonGames * 100, 1) AS win_rate FROM arena_team_member m JOIN arena_team t ON t.arenaTeamId = m.arenaTeamId WHERE m.guid = 100;

案例2:查询某战队中个人等级分最高的成员

SELECT m.guid, c.name, c.level, m.personalRating, m.seasonGames, m.seasonWins, m.weekGames, m.weekWins FROM arena_team_member m JOIN characters c ON c.guid = m.guid WHERE m.arenaTeamId = 1 ORDER BY m.personalRating DESC LIMIT 5;

案例3:统计每个战队成员数与平均个人等级分

SELECT m.arenaTeamId, t.name AS team_name, t.type, COUNT(*) AS member_count, AVG(m.personalRating) AS avg_rating, MAX(m.personalRating) AS max_rating FROM arena_team_member m JOIN arena_team t ON t.arenaTeamId = m.arenaTeamId GROUP BY m.arenaTeamId ORDER BY avg_rating DESC;

常见问题

Q1: personalRating 和 arena_team.rating 有什么区别?
personalRating 是成员个人的MMR(Matchmaking Rating),独立于战队总等级分。玩家的匹配和奖励基于个人等级分,而 arena_team.rating 是战队整体的表现等级分。
Q2: 一个角色可以同时在多个竞技场战队中吗?
可以。一个角色可以同时是多个不同类型(2v2/3v3/5v5)战队的成员。复合主键 (arenaTeamId, guid) 保证了同一角色在同一战队中只有一条记录。
Q3: 赛季结算时需要重置哪些数据?
赛季结算时需重置 seasonGamesseasonWins 为0。每周结算时重置 weekGamesweekWins。personalRating 通常在赛季初也会按公式衰减后重置。