This commit is contained in:
zlwu committed 2026-10-20 11:50:53 +08:00
1 parent a0bb39d069
commit 6034b215e5
19 files changed
+1396 -10

No files matched your search

@@ -0,0 +1,126 @@
-- =============================================================================
-- 将入学年份为 2026 或年级为 2026 的学生「是否住校」统一改为「是」
--
-- 目标表字段:
-- xg_student_msg.is_boarder 0-否,1-是
-- xg_student_msg.enrollment_year / grade
-- 同时兼容班级表 xg_class_msg.enrollment_year / grade(学生字段为空时以班级为准)
--
-- 用法:
-- mysql -h <host> -u root -p hzdyjs_xg < docs/数据库脚本/2026-10-16-xg_student_msg-set-boarder-2026.sql
--
-- 建议:先执行「一、预览」确认影响范围,再执行「二、更新」
-- =============================================================================
SET NAMES utf8mb4;
-- -----------------------------------------------------------------------------
-- 一、预览:命中范围与当前住校分布
-- -----------------------------------------------------------------------------
SELECT '========== 1. 命中学生数量(含已是住校)==========' AS section;
SELECT COUNT(*) AS match_total
FROM xg_student_msg s
LEFT JOIN xg_class_msg c
ON c.deleted = 0
AND NULLIF(TRIM(s.class_id), '') IS NOT NULL
AND c.id = CAST(NULLIF(TRIM(s.class_id), '') AS UNSIGNED)
WHERE s.deleted = 0
AND (
s.enrollment_year = 2026
OR s.grade = '2026'
OR c.enrollment_year = 2026
OR c.grade = '2026'
);
SELECT '========== 2. 命中且尚未住校(将被更新)==========' AS section;
SELECT COUNT(*) AS need_update_count
FROM xg_student_msg s
LEFT JOIN xg_class_msg c
ON c.deleted = 0
AND NULLIF(TRIM(s.class_id), '') IS NOT NULL
AND c.id = CAST(NULLIF(TRIM(s.class_id), '') AS UNSIGNED)
WHERE s.deleted = 0
AND IFNULL(s.is_boarder, 0) <> 1
AND (
s.enrollment_year = 2026
OR s.grade = '2026'
OR c.enrollment_year = 2026
OR c.grade = '2026'
);
SELECT '========== 3. 命中明细(抽样核对)==========' AS section;
SELECT
s.id,
s.student_no,
s.name,
s.enrollment_year AS student_enrollment_year,
s.grade AS student_grade,
c.enrollment_year AS class_enrollment_year,
c.grade AS class_grade,
s.is_boarder,
s.class_name,
s.college_name,
s.student_status
FROM xg_student_msg s
LEFT JOIN xg_class_msg c
ON c.deleted = 0
AND NULLIF(TRIM(s.class_id), '') IS NOT NULL
AND c.id = CAST(NULLIF(TRIM(s.class_id), '') AS UNSIGNED)
WHERE s.deleted = 0
AND (
s.enrollment_year = 2026
OR s.grade = '2026'
OR c.enrollment_year = 2026
OR c.grade = '2026'
)
ORDER BY s.enrollment_year, s.student_no
LIMIT 200;
-- -----------------------------------------------------------------------------
-- 二、更新:是否住校 -> 是(1)
-- -----------------------------------------------------------------------------
START TRANSACTION;
UPDATE xg_student_msg s
LEFT JOIN xg_class_msg c
ON c.deleted = 0
AND NULLIF(TRIM(s.class_id), '') IS NOT NULL
AND c.id = CAST(NULLIF(TRIM(s.class_id), '') AS UNSIGNED)
SET
s.is_boarder = 1,
s.update_time = NOW()
WHERE s.deleted = 0
AND IFNULL(s.is_boarder, 0) <> 1
AND (
s.enrollment_year = 2026
OR s.grade = '2026'
OR c.enrollment_year = 2026
OR c.grade = '2026'
);
-- 核对更新结果(事务内)
SELECT ROW_COUNT() AS updated_rows;
SELECT COUNT(*) AS still_not_boarder
FROM xg_student_msg s
LEFT JOIN xg_class_msg c
ON c.deleted = 0
AND NULLIF(TRIM(s.class_id), '') IS NOT NULL
AND c.id = CAST(NULLIF(TRIM(s.class_id), '') AS UNSIGNED)
WHERE s.deleted = 0
AND IFNULL(s.is_boarder, 0) <> 1
AND (
s.enrollment_year = 2026
OR s.grade = '2026'
OR c.enrollment_year = 2026
OR c.grade = '2026'
);
COMMIT;
-- 可选:仅预览不更新时,把上面 TRANSACTION 整段注释掉,或改为 ROLLBACK