77 lines
2.3 KiB
SQL
77 lines
2.3 KiB
SQL
-- 快速修复题目格式和数据
|
|
USE study;
|
|
|
|
-- 1. 设置默认分值
|
|
UPDATE question SET score = 5 WHERE score IS NULL OR score = 0;
|
|
UPDATE question_bank_item SET score = 5 WHERE score IS NULL OR score = 0;
|
|
|
|
-- 2. 为排序为空的题目设置排序
|
|
SET @row_number = 0;
|
|
SET @exam_id = NULL;
|
|
UPDATE question q
|
|
JOIN (
|
|
SELECT id, exam_id, (@row_number:=IF(@exam_id=exam_id, @row_number+1, 1)) AS new_order, (@exam_id:=exam_id)
|
|
FROM question
|
|
ORDER BY exam_id, IFNULL(sort_order, 999), id
|
|
) AS ranked ON q.id = ranked.id
|
|
SET q.sort_order = ranked.new_order
|
|
WHERE q.sort_order IS NULL;
|
|
|
|
-- 3. 同步考试题量和总分
|
|
UPDATE exam e
|
|
LEFT JOIN (
|
|
SELECT
|
|
exam_id,
|
|
COUNT(*) AS actual_count,
|
|
SUM(IFNULL(score, 0)) AS actual_score
|
|
FROM question
|
|
GROUP BY exam_id
|
|
) AS stats ON e.id = stats.exam_id
|
|
SET
|
|
e.question_count = IFNULL(stats.actual_count, 0),
|
|
e.total_score = IFNULL(stats.actual_score, 0);
|
|
|
|
-- 4. 规范化多选题答案格式
|
|
UPDATE question
|
|
SET correct_answer = REPLACE(REPLACE(correct_answer, ', ', ','), ' ,', ',')
|
|
WHERE question_type = 'multiple';
|
|
|
|
UPDATE question_bank_item
|
|
SET correct_answer = REPLACE(REPLACE(correct_answer, ', ', ','), ' ,', ',')
|
|
WHERE question_type = 'multiple';
|
|
|
|
-- 5. 规范化判断题答案
|
|
UPDATE question
|
|
SET correct_answer = CASE
|
|
WHEN LOWER(correct_answer) IN ('true', 't', '1', 'yes', '对') THEN '正确'
|
|
WHEN LOWER(correct_answer) IN ('false', 'f', '0', 'no', '错') THEN '错误'
|
|
ELSE correct_answer
|
|
END
|
|
WHERE question_type = 'judge';
|
|
|
|
UPDATE question_bank_item
|
|
SET correct_answer = CASE
|
|
WHEN LOWER(correct_answer) IN ('true', 't', '1', 'yes', '对') THEN '正确'
|
|
WHEN LOWER(correct_answer) IN ('false', 'f', '0', 'no', '错') THEN '错误'
|
|
ELSE correct_answer
|
|
END
|
|
WHERE question_type = 'judge';
|
|
|
|
-- 6. 验证修复结果
|
|
SELECT
|
|
e.id,
|
|
e.exam_name,
|
|
e.question_count AS 记录题量,
|
|
e.total_score AS 记录总分,
|
|
COUNT(q.id) AS 实际题量,
|
|
SUM(IFNULL(q.score, 0)) AS 实际总分,
|
|
CASE
|
|
WHEN e.question_count = COUNT(q.id) AND e.total_score = SUM(IFNULL(q.score, 0)) THEN '✓ 正确'
|
|
ELSE '❌ 不一致'
|
|
END AS 状态
|
|
FROM exam e
|
|
LEFT JOIN question q ON e.id = q.exam_id
|
|
GROUP BY e.id
|
|
ORDER BY e.create_time DESC
|
|
LIMIT 10;
|