80 lines
4.2 KiB
SQL
80 lines
4.2 KiB
SQL
-- ============================================================================
|
||
-- 002_i18n_columns.sql
|
||
-- 方案 A(独立列):把品牌名 / 走秀标题 / 描述 拆分为 en / cn 两列。
|
||
--
|
||
-- 设计前提(已用探查脚本核对线上数据):
|
||
-- * brand.name 多为拉丁名,但 266 个含中文;show_name 形如 "拉丁/中文"(2025 个含中文)。
|
||
-- * brand_runway.title / description 校验过 han=0,当前全为英文。
|
||
-- * 排序 / A-Z 索引 / 关键词搜索 统一基于 name_en(拉丁),中文品牌(name_en 为空)归入 OTHER 桶。
|
||
--
|
||
-- 回填策略:
|
||
-- name_en = name 去掉中文后的部分;若 name 全中文则取 show_name 斜杠前部分。
|
||
-- name_cn = show_name 斜杠后含中文的部分;否则 show_name 本身(含中文);否则 name(含中文)。
|
||
-- title_en / description_en = 原 title / description;title_cn / description_cn = ''(当前无中文)。
|
||
--
|
||
-- 旧列 name / show_name / title / description 保留不删,作为回退与对比;
|
||
-- 代码全部改用 *_en / *_cn 后,可择机在后续迁移中 DROP。
|
||
-- ============================================================================
|
||
|
||
ALTER TABLE brand
|
||
ADD COLUMN name_en VARCHAR(255) NOT NULL DEFAULT '' AFTER name,
|
||
ADD COLUMN name_cn VARCHAR(255) NOT NULL DEFAULT '' AFTER name_en;
|
||
|
||
ALTER TABLE brand_runway
|
||
ADD COLUMN title_en VARCHAR(255) NOT NULL DEFAULT '' AFTER title,
|
||
ADD COLUMN title_cn VARCHAR(255) NOT NULL DEFAULT '' AFTER title_en,
|
||
ADD COLUMN description_en VARCHAR(1024) NOT NULL DEFAULT '' AFTER description,
|
||
ADD COLUMN description_cn VARCHAR(1024) NOT NULL DEFAULT '' AFTER description_en;
|
||
|
||
-- 回填品牌名:拆拉丁 / 中文
|
||
UPDATE brand SET
|
||
name_en = CASE
|
||
WHEN TRIM(REGEXP_REPLACE(name, '[一-鿿]', '')) <> '' THEN TRIM(REGEXP_REPLACE(name, '[一-鿿]', ''))
|
||
WHEN show_name LIKE '%/%' THEN TRIM(SUBSTRING_INDEX(show_name, '/', 1))
|
||
ELSE ''
|
||
END,
|
||
name_cn = CASE
|
||
WHEN show_name LIKE '%/%' AND SUBSTRING_INDEX(show_name, '/', -1) REGEXP '[一-鿿]'
|
||
THEN TRIM(SUBSTRING_INDEX(show_name, '/', -1))
|
||
WHEN show_name REGEXP '[一-鿿]' THEN TRIM(show_name)
|
||
WHEN name REGEXP '[一-鿿]' THEN TRIM(name)
|
||
ELSE ''
|
||
END;
|
||
|
||
-- 回填走秀:当前 title / description 全为英文,直接进 *_en
|
||
UPDATE brand_runway SET
|
||
title_en = title,
|
||
description_en = description,
|
||
title_cn = '',
|
||
description_cn = '';
|
||
|
||
-- ============================================================================
|
||
-- 第 5 步(依赖「分类字段回填迁移」之后执行):title_cn 规则生成
|
||
--
|
||
-- 前提:collection_type / season / year 已由历史迁移解析回填(rtw/menswear/
|
||
-- couture/resort/pre_fall × spring/fall/空)。title 本质是「季节/品类描述」,
|
||
-- 品牌名在 JOIN 的 brand_name 里单独给,因此 title_cn 可纯规则生成,
|
||
-- 完全不依赖外部翻译服务,结果稳定可重跑。
|
||
--
|
||
-- 映射:resort→「{year} 度假系列」、pre_fall→「{year} 早秋系列」、
|
||
-- rtw→「{year} {春夏|秋冬}成衣」、menswear→「{year} {春夏|秋冬}男装」、
|
||
-- couture→「{year} {春夏|秋冬}高定」。
|
||
--
|
||
-- 执行器:scripts/backfill_title_cn/main.go(幂等,整表覆盖重跑无害)。
|
||
-- 该步骤与上方 i18n 加列/回填相互独立,可单独重跑。
|
||
-- ============================================================================
|
||
UPDATE brand_runway
|
||
SET title_cn = CASE
|
||
WHEN collection_type = 'resort' THEN CONCAT(year, ' 度假系列')
|
||
WHEN collection_type = 'pre_fall' THEN CONCAT(year, ' 早秋系列')
|
||
WHEN collection_type = 'rtw' AND season = 'spring' THEN CONCAT(year, ' 春夏成衣')
|
||
WHEN collection_type = 'rtw' AND season = 'fall' THEN CONCAT(year, ' 秋冬成衣')
|
||
WHEN collection_type = 'rtw' THEN CONCAT(year, ' 成衣')
|
||
WHEN collection_type = 'menswear' AND season = 'spring' THEN CONCAT(year, ' 春夏男装')
|
||
WHEN collection_type = 'menswear' AND season = 'fall' THEN CONCAT(year, ' 秋冬男装')
|
||
WHEN collection_type = 'couture' AND season = 'spring' THEN CONCAT(year, ' 春夏高定')
|
||
WHEN collection_type = 'couture' AND season = 'fall' THEN CONCAT(year, ' 秋冬高定')
|
||
ELSE CONCAT(year, ' 系列')
|
||
END
|
||
WHERE is_deleted = 0;
|