50 lines
2.3 KiB
SQL
50 lines
2.3 KiB
SQL
-- 为学生扩展表补充监护人手机号集合,并兼容已经存在学生、用户关系的历史环境。
|
|
-- guardian_phones 保存当前未逻辑删除的 GUARDIAN_WARD 关系中全部监护人手机号,按关系创建顺序去重并使用英文逗号分隔。
|
|
|
|
SET @guardian_phones_column_exists = (
|
|
SELECT COUNT(*)
|
|
FROM information_schema.columns
|
|
WHERE table_schema = DATABASE()
|
|
AND table_name = 'sys_user_student'
|
|
AND column_name = 'guardian_phones'
|
|
);
|
|
|
|
SET @guardian_phones_ddl = IF(
|
|
@guardian_phones_column_exists = 0,
|
|
'ALTER TABLE `sys_user_student` ADD COLUMN `guardian_phones` text DEFAULT NULL COMMENT ''监护人手机号集合,按监护关系创建顺序去重并使用英文逗号分隔'' AFTER `class_name`',
|
|
'SELECT ''sys_user_student.guardian_phones already exists'''
|
|
);
|
|
|
|
PREPARE guardian_phones_statement FROM @guardian_phones_ddl;
|
|
EXECUTE guardian_phones_statement;
|
|
DEALLOCATE PREPARE guardian_phones_statement;
|
|
|
|
SET @previous_group_concat_max_len = @@SESSION.group_concat_max_len;
|
|
SET SESSION group_concat_max_len = 65535;
|
|
|
|
UPDATE `sys_user_student` AS student
|
|
LEFT JOIN (
|
|
SELECT relation.tenant_id,
|
|
relation.object_user_id AS student_user_id,
|
|
GROUP_CONCAT(DISTINCT TRIM(guardian.phone) ORDER BY relation.relation_id SEPARATOR ',') AS guardian_phones
|
|
FROM `sys_user_relation` AS relation
|
|
INNER JOIN `sys_user_relation_type` AS relation_type
|
|
ON relation_type.relation_type_id = relation.relation_type_id
|
|
AND relation_type.tenant_id = relation.tenant_id
|
|
AND COALESCE(relation_type.del_flag, '0') = '0'
|
|
AND relation_type.relation_code = 'GUARDIAN_WARD'
|
|
INNER JOIN `sys_user` AS guardian
|
|
ON guardian.user_id = relation.subject_user_id
|
|
AND guardian.tenant_id = relation.tenant_id
|
|
AND COALESCE(guardian.del_flag, '0') = '0'
|
|
AND guardian.phone IS NOT NULL
|
|
AND TRIM(guardian.phone) <> ''
|
|
WHERE COALESCE(relation.del_flag, '0') = '0'
|
|
GROUP BY relation.tenant_id, relation.object_user_id
|
|
) AS guardian_relation
|
|
ON guardian_relation.student_user_id = student.user_id
|
|
AND guardian_relation.tenant_id = student.tenant_id
|
|
SET student.guardian_phones = guardian_relation.guardian_phones;
|
|
|
|
SET SESSION group_concat_max_len = @previous_group_concat_max_len;
|