118 lines
3.5 KiB
SQL
118 lines
3.5 KiB
SQL
-- ==========================================
|
||
-- 题目格式修复 - 逐步执行
|
||
-- 请按照注释一步一步执行,不要一次性全部执行
|
||
-- ==========================================
|
||
|
||
-- ==========================================
|
||
-- 第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;
|