Files
backend_v2/scripts/sql/002_i18n_columns.sql
toom1996 a6724265ad update
2026-08-26 19:40:16 +08:00

80 lines
4.2 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================================
-- 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;