-- ========================================== -- 题目格式修复 - 逐步执行 -- 请按照注释一步一步执行,不要一次性全部执行 -- ========================================== -- ========================================== -- 第1步:查看最近的考试(找到要修复的考试ID) -- ========================================== SELECT id, exam_name, create_time FROM exam ORDER BY id DESC LIMIT 10; -- 执行后,找到你要修复的考试ID,记下来 -- 例如:id = 14 -- ========================================== -- 第2步:查看该考试的题目(检查是否有问题) -- ========================================== -- 将下面的 14 替换成你的考试ID SELECT id, question_type, question_content, LEFT(options, 100) as options_preview, correct_answer FROM question WHERE exam_id = 14 ORDER BY id; -- 如果看到 options 中有 "A. "、"B. " 这样的前缀,说明需要修复 -- ========================================== -- 第3步:备份数据(必须执行!) -- ========================================== CREATE TABLE question_backup_20251205 AS SELECT * FROM question; -- 验证备份是否成功 SELECT COUNT(*) as backup_count FROM question_backup_20251205; -- ========================================== -- 第4步:修复题目(核心步骤) -- ========================================== -- 将下面的 14 替换成你的考试ID UPDATE question SET options = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( options, '"A. ', '"'), '"B. ', '"'), '"C. ', '"'), '"D. ', '"'), '"E. ', '"'), '"F. ', '"'), correct_answer = CASE WHEN correct_answer LIKE 'A. %' THEN 'A' WHEN correct_answer LIKE 'B. %' THEN 'B' WHEN correct_answer LIKE 'C. %' THEN 'C' WHEN correct_answer LIKE 'D. %' THEN 'D' WHEN correct_answer LIKE 'E. %' THEN 'E' WHEN correct_answer LIKE 'F. %' THEN 'F' ELSE correct_answer END WHERE exam_id = 14 AND question_type IN ('single', 'multiple'); -- ========================================== -- 第5步:验证修复结果 -- ========================================== -- 将下面的 14 替换成你的考试ID SELECT id, question_content, options, correct_answer FROM question WHERE exam_id = 14 ORDER BY id; -- 检查结果: -- options 应该是: ["选项内容1","选项内容2"] ✅ -- correct_answer 应该是: A ✅ -- ========================================== -- 第6步:检查学生答案(如果有人已经做过题) -- ========================================== -- 将下面的 14 替换成你的考试ID SELECT sa.id, sa.student_id, sa.question_id, sa.student_answer, q.correct_answer FROM student_answer sa JOIN question q ON sa.question_id = q.id WHERE sa.exam_id = 14 ORDER BY sa.student_id, sa.question_id; -- 如果 student_answer 也是 "A. 选项内容" 格式,执行下面的修复: -- UPDATE student_answer -- SET student_answer = CASE -- WHEN student_answer LIKE 'A. %' THEN 'A' -- WHEN student_answer LIKE 'B. %' THEN 'B' -- WHEN student_answer LIKE 'C. %' THEN 'C' -- WHEN student_answer LIKE 'D. %' THEN 'D' -- ELSE student_answer -- END -- WHERE exam_id = 14; -- ========================================== -- 完成! -- ========================================== -- 如果一切正常,修复完成 -- 如果出现问题,可以从备份恢复: -- DELETE FROM question WHERE exam_id = 14; -- INSERT INTO question SELECT * FROM question_backup_20251205 WHERE exam_id = 14;