表概述

group_member 表记录了每个队伍中每位成员的详细数据。一条记录代表一位玩家在某队伍中的信息,包括其在团队中的小组、角色职责和辅助标记等属性。

主键为 memberGuid(角色GUID),确保每个角色同时只能在一个队伍中。通过 guid 字段关联 groups 表。

表结构

字段名类型默认值说明
guidint UNSIGNEDNOT NULL所属队伍GUID(关联groups表)
memberGuidint UNSIGNEDNOT NULL成员角色GUID(主键)
memberFlagstinyint UNSIGNED0成员标记:1=助手, 2=准备确认, 4=主坦
subgrouptinyint UNSIGNED0所在小组编号(0-7,团队中分8个小组)
rolestinyint UNSIGNED0角色职责:1=坦克, 2=治疗, 4=输出, 8=队长

实际案例

案例1:查询某队伍所有成员的详细信息

SELECT gm.memberGuid, c.name, c.level, c.class, gm.subgroup, gm.roles, gm.memberFlags FROM group_member gm JOIN characters c ON c.guid = gm.memberGuid WHERE gm.guid = 1 ORDER BY gm.subgroup, c.name;

案例2:按小组统计各队中的角色分布

SELECT gm.guid AS group_id, gm.subgroup, COUNT(*) AS member_count, SUM(CASE WHEN gm.roles & 1 > 0 THEN 1 ELSE 0 END) AS tanks, SUM(CASE WHEN gm.roles & 2 > 0 THEN 1 ELSE 0 END) AS healers, SUM(CASE WHEN gm.roles & 4 > 0 THEN 1 ELSE 0 END) AS dps FROM group_member gm JOIN groups g ON g.guid = gm.guid WHERE g.groupType = 2 GROUP BY gm.guid, gm.subgroup ORDER BY gm.guid, gm.subgroup;

案例3:查找指定角色当前所在队伍

SELECT g.guid AS group_id, g.groupType, CASE g.groupType WHEN 0 THEN '普通队伍' WHEN 2 THEN '团队' END AS type_name, gm.subgroup, gm.roles, gm.memberFlags, (SELECT COUNT(*) FROM group_member WHERE guid = g.guid) AS total_members FROM group_member gm JOIN groups g ON g.guid = gm.guid WHERE gm.memberGuid = 100;

常见问题

Q1: memberFlags 字段的取值含义是什么?
memberFlags 使用位掩码:1=助手(Assistant),2=准备确认标记(MainTank),4=主坦标记(MainAssist)。可以组合使用,如值为3表示既是助手又带有准备确认标记。
Q2: roles 字段如何使用位掩码?趋势
roles 使用位运算:1=坦克(Tank),2=治疗(Healer),4=输出(DPS),8=队长(Leader)。查询时使用 roles & 1 判断是否为坦克。
Q3: subgroup 的取值范围是多少?
在普通5人队伍中,subgroup 通常为 0。在团队中,subgroup 取值范围为 07,分别代表8个小组。主键 memberGuid 保证一个角色同时只能在一个队伍中。