guoyu/Test/sql/修复课件时长.sql

98 lines
3.5 KiB
MySQL
Raw Normal View History

-- 修复课件时长问题
-- 问题课件duration字段为0或NULL导致学习进度计算不准确
-- 解决:根据实际视频文件更新时长,或手动设置合理的时长
-- 1. 查看当前课件时长情况
SELECT
id,
courseware_name AS ,
type AS ,
duration AS ,
CASE
WHEN duration IS NULL OR duration = 0 THEN '❌ 需要修复'
ELSE '✅ 正常'
END AS ,
file_path AS
FROM study_courseware
WHERE course_id = 1 -- 修改为你要检查的课程ID
ORDER BY courseware_order;
-- 2. 手动更新课件时长(根据实际视频时长)
-- 示例:假设你的视频实际时长如下
-- 更新课件ID=883的时长为60秒请根据实际情况修改
UPDATE study_courseware SET duration = 60 WHERE id = 883;
-- 更新课件ID=884的时长为120秒
UPDATE study_courseware SET duration = 120 WHERE id = 884;
-- 更新课件ID=885的时长为90秒
UPDATE study_courseware SET duration = 90 WHERE id = 885;
-- 更新课件ID=886的时长为150秒
UPDATE study_courseware SET duration = 150 WHERE id = 886;
-- 更新课件ID=887的时长为180秒
UPDATE study_courseware SET duration = 180 WHERE id = 887;
-- 3. 批量更新为所有duration为0或NULL的视频课件设置默认时长60秒
-- ⚠️ 慎用!建议先查看具体视频再设置准确时长
-- UPDATE study_courseware
-- SET duration = 60
-- WHERE type = 'video'
-- AND (duration IS NULL OR duration = 0);
-- 4. 验证更新结果
SELECT
id,
courseware_name AS ,
duration AS ,
ROUND(duration / 60, 2) AS ,
file_path AS
FROM study_courseware
WHERE course_id = 1 -- 修改为你的课程ID
AND type = 'video'
ORDER BY courseware_order;
-- 5. 重新计算学习进度(更新课件时长后,需要触发进度重算)
-- 方法A: 删除学习记录,让用户重新学习时自动计算
-- DELETE FROM study_learning_record WHERE student_id = 452 AND course_id = 1;
-- 方法B: 保留学习记录手动更新进度为0下次学习时会重新计算
-- UPDATE study_learning_record
-- SET progress = 0
-- WHERE student_id = 452 AND course_id = 1;
-- 6. 查看学习详情,检查是否有异常数据
SELECT
sld.id,
sld.courseware_id AS ID,
sc.courseware_name AS ,
sc.duration AS ,
sld.video_position AS ,
CASE
WHEN sc.duration > 0 THEN ROUND(sld.video_position * 100.0 / sc.duration, 2)
ELSE NULL
END AS ,
CASE
WHEN sld.video_position >= sc.duration * 0.9 THEN '✅ 已完成'
WHEN sld.video_position == (
SELECT MAX(video_position)
FROM study_learning_detail
WHERE courseware_id = sld.courseware_id
AND student_id = sld.student_id
) AND sld.video_position >= 3 THEN '✅ 已完成(到达最远位置)'
ELSE '⏸️ 未完成'
END AS
FROM study_learning_detail sld
LEFT JOIN study_courseware sc ON sld.courseware_id = sc.id
WHERE sld.student_id = 452 -- 修改为你的学生ID
AND sld.course_id = 1 -- 修改为你的课程ID
ORDER BY sld.courseware_id, sld.video_position DESC;
-- 注意事项:
-- 1. 执行UPDATE语句前请务必先备份数据库
-- 2. 根据实际视频时长设置duration值单位
-- 3. 更新后,下次学习时系统会自动重新计算进度
-- 4. 可以在APP中重新进入课程触发进度重新计算