-- ========================================
-- 修复学生多班级问题
-- ========================================

-- 第一步：查看有多个班级的学生
SELECT 
    student_id,
    COUNT(*) as class_count,
    GROUP_CONCAT(class_id ORDER BY join_time DESC) as class_ids,
    GROUP_CONCAT(join_time ORDER BY join_time DESC) as join_times
FROM student_class
WHERE status = 1
GROUP BY student_id
HAVING COUNT(*) > 1;

-- 第二步：查看编号206的详细记录
SELECT 
    sc.id,
    sc.student_id,
    sc.class_id,
    c.class_name,
    sc.status,
    sc.join_time,
    sc.create_time
FROM student_class sc
LEFT JOIN class c ON sc.class_id = c.id
WHERE sc.student_id = 206
ORDER BY sc.join_time DESC, sc.create_time DESC;

-- 第三步：修复数据（保留最新的班级记录，其他设为status=0）
-- ⚠️ 请先执行上面的查询确认数据后，再执行此更新！

-- 方法：为每个学生只保留join_time最新的那条记录
UPDATE student_class sc1
SET status = 0
WHERE status = 1
  AND student_id IN (
      -- 找出有多个班级的学生
      SELECT student_id
      FROM (
          SELECT student_id
          FROM student_class
          WHERE status = 1
          GROUP BY student_id
          HAVING COUNT(*) > 1
      ) AS multi_class_students
  )
  AND id NOT IN (
      -- 为每个学生保留join_time最新的记录
      SELECT id
      FROM (
          SELECT id
          FROM student_class sc2
          WHERE sc2.status = 1
            AND sc2.student_id = sc1.student_id
          ORDER BY sc2.join_time DESC, sc2.create_time DESC
          LIMIT 1
      ) AS keep_records
  );

-- 第四步：验证修复结果
SELECT 
    student_id,
    COUNT(*) as active_class_count,
    GROUP_CONCAT(class_id) as class_ids
FROM student_class
WHERE status = 1
GROUP BY student_id
HAVING COUNT(*) > 1;

-- 应该返回空结果，说明每个学生只有一个活跃班级
