表概述
arena_team_member 表记录了每个竞技场战队中每位成员的个人竞技数据。一条记录代表一位玩家在某战队中的信息,包含其在战队中的个人等级分以及赛季和每周的参赛记录。
- 战队成员关联
- 个人等级分
- 赛季/每周战绩
- 成员活跃度统计
复合主键为 (arenaTeamId, guid)。arenaTeamId 关联 arena_team 表,guid 关联 characters 表的角色GUID。
每个角色可以在不同的战队中拥有独立的战绩数据(例如可以同时参加2v2和3v3战队)。
表结构
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| arenaTeamId | int UNSIGNED | 0 | 所属竞技场战队ID(复合主键) |
| guid | int UNSIGNED | 0 | 角色GUID(复合主键) |
| weekGames | smallint UNSIGNED | 0 | 该成员本周总场次 |
| weekWins | smallint UNSIGNED | 0 | 该成员本周胜场数 |
| seasonGames | smallint UNSIGNED | 0 | 该成员本赛季总场次 |
| seasonWins | smallint UNSIGNED | 0 | 该成员本赛季胜场数 |
| personalRating | smallint | 0 | 个人等级分(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: 赛季结算时需要重置哪些数据?
赛季结算时需重置
seasonGames 和 seasonWins 为0。每周结算时重置 weekGames 和 weekWins。personalRating 通常在赛季初也会按公式衰减后重置。