📖 log_arena_fights 表
竞技场战斗日志表,记录每场竞技场战斗的胜负结果和双方队伍数据。
📋 表概述
log_arena_fights 表以战斗为单位记录竞技场的每一场比赛。包含比赛的胜负方、比赛时长、双方的等级分变化以及在线人数等信息,是竞技场数据分析和排名追踪的重要日志表。
- 主键:(fight_id)
- 引擎:InnoDB
- 关联表:log_arena_memberstats(通过 fight_id)
📊 表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
fight_id | int UNSIGNED | (无) | 战斗唯一ID,关联 log_arena_memberstats |
time | datetime | (无) | 战斗发生时间 |
type | tinyint UNSIGNED | (无) | 竞技场类型:0=2v2, 1=3v3, 2=5v5 |
duration | int UNSIGNED | (无) | 战斗持续时间(秒) |
winner | int UNSIGNED | (无) | 获胜方队伍 ID |
loser | int UNSIGNED | (无) | 失败方队伍 ID |
winner_tr | smallint UNSIGNED | (无) | 获胜方赛前队伍等级 |
winner_mmr | smallint UNSIGNED | (无) | 获胜方赛前匹配分 |
winner_tr_change | smallint | (无) | 获胜方等级变化(可为负) |
loser_tr | smallint UNSIGNED | (无) | 失败方赛前队伍等级 |
loser_mmr | smallint UNSIGNED | (无) | 失败方赛前匹配分 |
loser_tr_change | smallint | (无) | 失败方等级变化(通常为负) |
currOnline | int UNSIGNED | (无) | 本场比赛时的服务器在线人数 |
🔍 重要字段详解
winner_tr_change / loser_tr_change — 等级分变化
这是 Elo 等级系统/MMR 算法的核心数据。胜方通常获得正分,败方扣除分数。分数变化幅度取决于双方实力差距(弱队战胜强队会获得更多分数)。
duration — 战斗持续时间
单位为秒。可通过此字段分析竞技场平均战斗时长,检测异常快速结束或超长比赛的作弊行为。
currOnline — 在线人数
记录比赛时刻的服务器在线玩家数,用于分析不同时段竞技场活跃度与在线人数的关系。
💡 SQL查询示例
查询某队伍的最近10场比赛记录
SELECT lf.fight_id, lf.time, lf.type,
CASE WHEN lf.winner = 123 THEN '胜' ELSE '负' END AS 结果,
lf.duration, lf.winner_tr_change, lf.loser_tr_change
FROM log_arena_fights lf
WHERE lf.winner = 123 OR lf.loser = 123
ORDER BY lf.time DESC
LIMIT 10;
统计各类型竞技场平均战斗时长
SELECT CASE type WHEN 0 THEN '2v2' WHEN 1 THEN '3v3' WHEN 2 THEN '5v5' END AS 类型,
COUNT(*) AS 场次, AVG(duration) AS 平均时长秒
FROM log_arena_fights
GROUP BY type;
❓ 常见问题
Q: fight_id 如何生成?
fight_id 由竞技场匹配系统在战斗开始时分配,通常是一个全局递增的整数。可以串联 log_arena_memberstats 表获取每场战斗的队员详情。
Q: winner_tr 和 winner_mmr 有什么区别?
winner_tr 是队伍显示的竞技场等级(Rating),玩家可见。winner_mmr 是匹配分(Match Making Rating),系统内部使用来匹配实力相当的对手,玩家不可见。