-- ========================================
-- 修正学生角色分配
-- ========================================
-- 问题：71个学生有班级但没有"学员"角色
-- 影响：统计学生数时不准确
-- 解决：给所有有班级的学生添加"学员"角色
-- ========================================

-- 第1步：查询学员角色ID
SELECT role_id, role_name, role_key 
FROM sys_role 
WHERE role_name LIKE '%学员%' OR role_key LIKE '%student%';

-- 假设学员角色ID为4（请根据实际情况修改）
SET @student_role_id = 4;

-- 第2步：查询需要添加角色的学生
SELECT 
    u.user_id,
    u.user_name,
    u.nick_name,
    '需要添加学员角色' as action
FROM sys_user u
INNER JOIN student_class sc ON u.user_id = sc.student_id
LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id AND ur.role_id = @student_role_id
WHERE ur.user_id IS NULL
LIMIT 10;

-- 统计数量
SELECT COUNT(DISTINCT u.user_id) as need_role_count
FROM sys_user u
INNER JOIN student_class sc ON u.user_id = sc.student_id
LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id AND ur.role_id = @student_role_id
WHERE ur.user_id IS NULL;

-- 第3步：批量添加学员角色
INSERT INTO sys_user_role (user_id, role_id)
SELECT DISTINCT 
    u.user_id,
    @student_role_id
FROM sys_user u
INNER JOIN student_class sc ON u.user_id = sc.student_id
LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id AND ur.role_id = @student_role_id
WHERE ur.user_id IS NULL;

-- 第4步：验证结果
SELECT 
    '有班级的学生' as type,
    COUNT(DISTINCT student_id) as count
FROM student_class
UNION ALL
SELECT 
    '有学员角色的用户' as type,
    COUNT(DISTINCT u.user_id) as count
FROM sys_user u
INNER JOIN sys_user_role ur ON u.user_id = ur.user_id
INNER JOIN sys_role r ON ur.role_id = r.role_id
WHERE r.role_name LIKE '%学员%';

-- 应该显示两个数字一致（都是278）

-- ========================================
-- 使用说明
-- ========================================
-- 1. 先查询学员角色ID（第1步）
-- 2. 修改@student_role_id为实际ID
-- 3. 查询需要添加角色的学生（第2步，确认）
-- 4. 执行批量添加（第3步）
-- 5. 验证结果（第4步）
-- ========================================
