【发布时间】:2020-05-26 23:33:30
【问题描述】:
我有一个包含 5 列的 mySQL 表。
* translation_id 是一个自增主键
* element_id 是文章/文章的ID
* language_code 是文章/文章的语言
* trid 是元素是翻译的原始帖子/文章的 ID
* source_language_code 是原始文章/文章的语言
+----------------+------------+---------------+------+----------------------+
| translation_id | element_id | language_code | trid | source_language_code |
+----------------+------------+---------------+------+----------------------+
| 1 | 1 | hu | 1 | hu |
| 2 | 2 | hu | 2 | hu |
| 3 | 3 | hu | 3 | hu |
| 4 | 4 | hu | 4 | hu |
| 5 | 5 | en | 1 | hu |
| 6 | 99 | en | 2 | hu |
| 7 | 27 | en | 3 | hu |
| 8 | 8 | en | 4 | hu |
| 9 | 9 | es | 1 | hu |
| 10 | 10 | es | 2 | hu |
| 11 | 11 | es | 3 | hu |
| 12 | 12 | es | 4 | hu |
| 13 | 13 | nl | 1 | hu |
| 14 | 14 | nl | 2 | hu |
| 15 | 55 | nl | 3 | hu |
| 16 | 16 | nl | 4 | hu |
| 17 | 77 | fr | 1 | hu |
| 18 | 18 | fr | 2 | hu |
| 19 | 19 | fr | 3 | hu |
| 20 | 20 | fr | 4 | hu |
+----------------+------------+---------------+------+----------------------+
在上表中,您可以看到 ID 为 1、2、3、4 的匈牙利语 (hu) 页面已被翻译成英语、西班牙语、荷兰语和法语。
我想做的是将原始/源语言更改为英语。一部分很容易实现:将source_language_code 设置为en。
但这只是工作的一部分。第二位是将trid设置为5如果是1,99如果是2,27如果是3和8如果是4。
换句话说,对于每个匈牙利帖子,我需要找到trid 匹配匈牙利语帖子的英文帖子的element_id,
然后将该英文帖子的element_id 设置为trid 与匈牙利帖子匹配的所有帖子(所有语言)的trid。
FOR EACH `element_id` AS hungarian FROM `table` WHERE `language_code` = "hu" {
SELECT `element_id` AS english FROM `table` WHERE `trid` = hungarian AND `language_code` = "en";
UPDATE `table` SET `trid` = english WHERE `trid` = hungarian;
}
目标输出
+----------------+------------+---------------+------+----------------------+
| translation_id | element_id | language_code | trid | source_language_code |
+----------------+------------+---------------+------+----------------------+
| 1 | 1 | hu | 5 | en |
| 2 | 2 | hu | 99 | en |
| 3 | 3 | hu | 27 | en |
| 4 | 4 | hu | 8 | en |
| 5 | 5 | en | 5 | en |
| 6 | 99 | en | 99 | en |
| 7 | 27 | en | 27 | en |
| 8 | 8 | en | 8 | en |
| 9 | 9 | es | 5 | en |
| 10 | 10 | es | 99 | en |
| 11 | 11 | es | 27 | en |
| 12 | 12 | es | 8 | en |
| 13 | 13 | nl | 5 | en |
| 14 | 14 | nl | 99 | en |
| 15 | 55 | nl | 27 | en |
| 16 | 16 | nl | 8 | en |
| 17 | 77 | fr | 5 | en |
| 18 | 18 | fr | 99 | en |
| 19 | 19 | fr | 27 | en |
| 20 | 20 | fr | 8 | en |
+----------------+------------+---------------+------+----------------------+
【问题讨论】:
-
请添加预期结果。我的第一印象是查询
update my_table set source_language_code = 'en', trid = trid + 4可以完成这项工作,但我可能错了。 -
SQL 是一种基于集合的语言。你不会循环你的记录!
-
@the-impaler 谢谢!但元素 ID 的模式只是插图的产物,并不存在于实际数据中。
-
什么是
language_id?你的意思是language_code?