guoyu/log/Sql/fix_question_format.sql

106 lines
3.0 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 修复题目格式问题
-- 问题:选项和答案包含 "A. " 前缀,导致答案判断失败
-- ==========================================
-- 1. 查看有问题的题目
-- ==========================================
SELECT
id,
question_type,
question_content,
options,
correct_answer,
exam_id
FROM study_question
WHERE
-- 选项包含 "A. " 前缀的
options LIKE '%"A. %'
OR options LIKE '%"B. %'
OR options LIKE '%"C. %'
-- 或正确答案包含前缀的
OR (question_type = 'single' AND correct_answer LIKE '%. %')
ORDER BY exam_id, id;
-- ==========================================
-- 2. 手动修复示例替换你的题目ID和内容
-- ==========================================
-- 修复单选题(去除选项和答案的前缀)
-- 示例:
-- UPDATE study_question
-- SET
-- options = '["选项内容1","选项内容2","选项内容3"]', -- 去除 "A. "、"B. " 等前缀
-- correct_answer = 'A' -- 只保留字母
-- WHERE id = {题目ID};
-- ==========================================
-- 3. 批量修复脚本(谨慎使用!先备份!)
-- ==========================================
-- 备份表
-- CREATE TABLE study_question_backup AS SELECT * FROM study_question;
-- 注意:以下脚本需要根据实际数据调整,建议一条一条手动执行
-- 修复考试14的题目根据你的实际情况修改
-- 题目149
UPDATE study_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');
-- ==========================================
-- 4. 验证修复结果
-- ==========================================
SELECT
id,
question_type,
question_content,
options,
correct_answer
FROM study_question
WHERE exam_id = 14
ORDER BY id;
-- ==========================================
-- 5. 检查学生答案是否也需要修复
-- ==========================================
SELECT
sa.id,
sa.question_id,
sa.student_answer,
sa.is_correct,
q.correct_answer,
q.question_type
FROM study_student_answer sa
JOIN study_question q ON sa.question_id = q.id
WHERE sa.exam_id = 14
ORDER BY sa.student_id, sa.question_id;
-- 如果学生答案也包含前缀,也需要修复
-- UPDATE study_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;