📖 log_arena_memberstats 表
竞技场成员战斗统计表,记录每场比赛中每个玩家的个人表现数据。
📋 表概述
log_arena_memberstats 表以成员维度记录每场竞技场战斗中每个玩家的详细表现,包括玩家身份、所属队伍、账号IP、输出治疗和击杀等关键战斗数据。
- 主键:(fight_id, member_id)
- 引擎:InnoDB
- 关联表:log_arena_fights(通过 fight_id)
📊 表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
fight_id | int UNSIGNED | (无) | 战斗ID,关联 log_arena_fights |
member_id | tinyint UNSIGNED | (无) | 队员编号(0~5),区分同一场中的不同队员 |
name | char(20) | (无) | 玩家角色名称 |
guid | int UNSIGNED | (无) | 玩家角色 GUID,关联 characters.guid |
team | int UNSIGNED | (无) | 所属队伍 ID |
account | int UNSIGNED | (无) | 玩家账号 ID |
ip | char(15) | (无) | 玩家 IP 地址 |
damage | int UNSIGNED | (无) | 本场所造成的总伤害值 |
heal | int UNSIGNED | (无) | 本场所造成的总治疗值 |
kblows | int UNSIGNED | (无) | 本场击杀次数(最后一击) |
🔍 重要字段详解
member_id — 队员编号
同一场战斗中每个队员的唯一编号,通常 winner 方为 0~N-1,loser 方为 N~2N-1。用于在一场比赛记录中区分不同玩家。
account / ip — 账号与 IP 信息
记录玩家账号 ID 和 IP 地址。这些数据可用于反作弊检测——例如检查有无同一 IP 登录不同队伍进行刷分的异常行为。
damage / heal / kblows — 战斗表现
damage 为总伤害输出,heal 为总治疗输出,kblows 为击杀次数(killing blows)。是评估玩家实战表现的核心指标。
💡 SQL查询示例
查询某玩家最近参与的竞技场战斗数据
SELECT lf.fight_id, lf.time, lam.name, lam.damage, lam.heal, lam.kblows
FROM log_arena_memberstats lam
JOIN log_arena_fights lf ON lam.fight_id = lf.fight_id
WHERE lam.guid = 12345
ORDER BY lf.time DESC
LIMIT 10;
查询某场比赛的所有队员统计数据
SELECT lam.member_id, lam.name, lam.team,
lam.damage, lam.heal, lam.kblows,
CASE WHEN lam.team = lf.winner THEN '胜' ELSE '负' END AS 结果
FROM log_arena_memberstats lam
JOIN log_arena_fights lf ON lam.fight_id = lf.fight_id
WHERE lam.fight_id = 1000;
❓ 常见问题
Q: 如何检测竞技场刷分行为?
通过检查 log_arena_memberstats 中同一 IP 地址是否出现在胜负双方队伍中。如果同一 IP 多次出现且多为"送分"模式,就可能是刷分行为:SELECT lf.fight_id, COUNT(DISTINCT lam.team) as teams, COUNT(*) as players FROM log_arena_memberstats lam JOIN log_arena_fights lf ON lam.fight_id = lf.fight_id WHERE lam.ip IN (SELECT ip FROM log_arena_memberstats GROUP BY ip HAVING COUNT(DISTINCT fight_id) > 100) GROUP BY lf.fight_id HAVING COUNT(DISTINCT lam.ip) < LEAST(teams, 4);
Q: 如何查看某个账号所有角色的竞技场表现?
通过 account 字段聚合查询即可:SELECT lam.guid, lam.name, SUM(lam.damage) as total_damage, COUNT(DISTINCT lam.fight_id) as fights FROM log_arena_memberstats lam WHERE lam.account = 100 GROUP BY lam.guid, lam.name;