表概述
group_member 表记录了每个队伍中每位成员的详细数据。一条记录代表一位玩家在某队伍中的信息,包括其在团队中的小组、角色职责和辅助标记等属性。
- 成员队伍关联
- 小组分组管理
- 角色职责设定
- 成员标记管理
主键为 memberGuid(角色GUID),确保每个角色同时只能在一个队伍中。通过 guid 字段关联 groups 表。
表结构
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| guid | int UNSIGNED | NOT NULL | 所属队伍GUID(关联groups表) |
| memberGuid | int UNSIGNED | NOT NULL | 成员角色GUID(主键) |
| memberFlags | tinyint UNSIGNED | 0 | 成员标记:1=助手, 2=准备确认, 4=主坦 |
| subgroup | tinyint UNSIGNED | 0 | 所在小组编号(0-7,团队中分8个小组) |
| roles | tinyint UNSIGNED | 0 | 角色职责: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 取值范围为 0 到 7,分别代表8个小组。主键 memberGuid 保证一个角色同时只能在一个队伍中。