MySQL中为翻译工具生成多语言待翻译行的实现方法
你的原有SQL逻辑不对,它只是把表中目标语言非'en'/'zh'/'ar'/'th'的待翻译行重复插入,并没有生成你需要的指定目标语言的待翻译记录。要实现为每个待翻译文本生成这四种目标语言的行,可以用下面的SQL:
INSERT INTO Translation (text, `from`, `to`, tran) SELECT t.text, t.`from`, target_lang.lang, '' FROM Translation t CROSS JOIN (VALUES ('en'), ('zh'), ('ar'), ('th')) AS target_lang(lang) WHERE t.tran = '' AND target_lang.lang != t.`from` AND NOT EXISTS ( SELECT 1 FROM Translation WHERE text = t.text AND `from` = t.`from` AND `to` = target_lang.lang );
逻辑说明:
- 用
CROSS JOIN和VALUES子句生成四个目标语言的集合,和每个待翻译的源文本(tran=''的行)做关联,得到每个文本对应四种目标语言的组合。 - 过滤掉目标语言和源语言相同的情况,避免无效翻译任务。
- 通过
NOT EXISTS子查询避免插入重复的(文本、源语言、目标语言)记录,防止表中出现冗余数据。 - 插入时把
tran设为空,符合程序对待翻译行的识别规则。
内容的提问来源于stack exchange,提问作者AC1D
相关产品推荐
相关产品推荐

