fix bug
This commit is contained in:
93
doc/sql/transport/blade_region_plus86_migration.sql
Normal file
93
doc/sql/transport/blade_region_plus86_migration.sql
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
Navicat Premium / MySQL 5.7+
|
||||
将 blade_region 的中国国家编码统一为 +86。
|
||||
|
||||
适用场景:
|
||||
1. 旧数据使用 code = '00' 作为中国根节点;
|
||||
2. 旧数据使用 code = '86' 或 parent_code / ancestors = '86';
|
||||
3. 当前数据没有国家根节点,但省级数据 parent_code 已经是 '86'。
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
-- 1. 确保新的中国国家节点存在。
|
||||
INSERT INTO `blade_region` (
|
||||
`code`,
|
||||
`parent_code`,
|
||||
`ancestors`,
|
||||
`name`,
|
||||
`province_code`,
|
||||
`province_name`,
|
||||
`city_code`,
|
||||
`city_name`,
|
||||
`district_code`,
|
||||
`district_name`,
|
||||
`town_code`,
|
||||
`town_name`,
|
||||
`village_code`,
|
||||
`village_name`,
|
||||
`region_level`,
|
||||
`sort`,
|
||||
`remark`
|
||||
)
|
||||
SELECT
|
||||
'+86',
|
||||
'0',
|
||||
'0',
|
||||
COALESCE(
|
||||
(SELECT r.`name` FROM (SELECT `code`, `name` FROM `blade_region`) r WHERE r.`code` IN ('86', '00') ORDER BY FIELD(r.`code`, '86', '00') LIMIT 1),
|
||||
'中华人民共和国'
|
||||
),
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
0,
|
||||
1,
|
||||
''
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM (SELECT `code` FROM `blade_region` WHERE `code` = '+86') exists_region
|
||||
);
|
||||
|
||||
-- 2. 如果 +86 已存在,仍强制修正它的根节点关系。
|
||||
UPDATE `blade_region`
|
||||
SET
|
||||
`parent_code` = '0',
|
||||
`ancestors` = '0',
|
||||
`region_level` = 0
|
||||
WHERE `code` = '+86';
|
||||
|
||||
-- 3. 省级节点统一挂到 +86 下。
|
||||
UPDATE `blade_region`
|
||||
SET `parent_code` = '+86'
|
||||
WHERE `parent_code` IN ('00', '86');
|
||||
|
||||
-- 4. ancestors 按逗号分隔 token 精确替换,避免误伤 110086 这类编码。
|
||||
UPDATE `blade_region`
|
||||
SET `ancestors` = TRIM(BOTH ',' FROM REPLACE(REPLACE(CONCAT(',', `ancestors`, ','), ',00,', ',+86,'), ',86,', ',+86,'))
|
||||
WHERE FIND_IN_SET('00', `ancestors`) > 0
|
||||
OR FIND_IN_SET('86', `ancestors`) > 0;
|
||||
|
||||
-- 5. 清理旧中国根节点,避免树上出现多个国家根。
|
||||
DELETE FROM `blade_region`
|
||||
WHERE `code` IN ('00', '86')
|
||||
AND (`region_level` = 0 OR `name` IN ('中华人民共和国', '中国'));
|
||||
|
||||
COMMIT;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- 验证:
|
||||
-- SELECT `code`, `parent_code`, `ancestors`, `name`, `region_level` FROM `blade_region` WHERE `code` = '+86';
|
||||
-- SELECT `code`, `parent_code`, `ancestors`, `name`, `region_level` FROM `blade_region` WHERE `parent_code` = '+86' ORDER BY `code` LIMIT 20;
|
||||
-- SELECT `code`, `parent_code`, `ancestors`, `name` FROM `blade_region` WHERE `parent_code` IN ('00', '86') OR FIND_IN_SET('00', `ancestors`) > 0 OR FIND_IN_SET('86', `ancestors`) > 0;
|
||||
Reference in New Issue
Block a user