[英]For each loop in MySqL
我有一个包含 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
for all。
但这只是工作的一部分。 第二位是设置trid
如果是1
则为5
,如果是2
则设置为99
,如果是3
则设置为27
,如果是4
则设置为8
。
换句话说,对于每个匈牙利帖子,我需要找到
其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;
}
目标 output
+----------------+------------+---------------+------+----------------------+
| 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
与自联接一起使用:
UPDATE yourTable AS t1
JOIN yourTable AS t2 ON t1.trid = t2.trid
SET t1.trid = t2.element_id, t1.source_language_code = 'en'
WHERE t2.language_code = 'en';
由于您要更改所有行,因此无需测试language_code = 'hu'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.