diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/CourseStatDao.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/CourseStatDao.java index 8bf0a374..67fbfb3d 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/CourseStatDao.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/CourseStatDao.java @@ -26,36 +26,34 @@ public class CourseStatDao extends BaseDao { StringBuilder sql = new StringBuilder(); sql.append("SELECT ") // 资源名 - .append("c.content_name AS contentName, ") + .append("cc.content_name AS contentName, ") // 资源ID - .append("c.content_id AS contentId, ") + .append("cc.id AS contentId, ") // 完成人数(去重统计) .append("COUNT(DISTINCT c.aid) AS finishCount, ") //2025.11.27新增:资源类型 .append("cc.content_type AS contentType ") // 你的课程表名 - .append("FROM boe_study_course_item c ") + .append("FROM boe_course_content cc ") // 2025.11.27新增:连表 boe_course_content - .append("LEFT JOIN boe_course_content cc ON cc.id = c.content_id ") - .append("WHERE 1=1 ") - // 条件:已完成 - .append("AND c.status = 9 "); + .append("LEFT JOIN boe_study_course_item c ON cc.id = c.content_id AND c.status = 9 ") + .append("WHERE 1=1 "); List params = new ArrayList<>(); // courseId非空则过滤(参数化防注入) if (StringUtils.isNotBlank(courseId)) { - sql.append("AND c.course_id = ? "); + sql.append("AND cc.course_id = ? "); params.add(courseId); } // 25.12.1修改 新增:contentName模糊查询(粗略匹配) if (StringUtils.isNotBlank(contentName)) { // 实现“包含contentName”的模糊查询 - sql.append("AND c.content_name LIKE ? "); + sql.append("AND cc.content_name LIKE ? "); // 通配符%拼接在参数上防注入,表示“前后任意字符包含contentName” params.add("%" + contentName + "%"); } // 分组+排序+分页(聚合函数必须分组,排序参考第一个代码的desc id) - sql.append("GROUP BY c.content_id, c.content_name, cc.content_type ") - .append("ORDER BY c.content_id DESC ") + sql.append("GROUP BY cc.id, cc.content_name, cc.content_type ") + .append("ORDER BY cc.id DESC ") // MySQL分页:偏移量,每页条数 .append("LIMIT ?, ?"); // 补充分页参数(顺序:startIndex → pageSize)