for mysql中的每个循环

aij0ehis  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(290)

我有一个5列的mysql表。

  • 转换id是一个自动递增的主键
  • element\u id是文章的id
  • 语言代码是文章的语言
  • trid是元素为翻译的原始帖子/文章的id
  • 源语言代码是原文/文章的语言
+----------------+------------+---------------+------+----------------------+  
| 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                   |   
+----------------+------------+---------------+------+----------------------+

我在上面的表格,你可以看到匈牙利人( hu )带有ID的页面 1 , 2 , 3 , 4 已被翻译成英语、西班牙语、荷兰语和法语。
我想做的是把原文/源语言改成英语。其中一个部分很容易实现:设置 source_language_codeen 为了所有人。
但这只是工作的一部分。第二位是设置 trid 作为 5 如果是的话 1 , 99 如果是的话 2 , 27 如果是的话 3 以及 8 如果是的话 4 .
换言之,对于每个匈牙利职位,我需要找到
这个 element_id 英国邮政的 trid 匹配匈牙利邮政,
然后把那篇英文文章 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                   |   
+----------------+------------+---------------+------+----------------------+
p5fdfcr1

p5fdfcr11#

使用 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' .

相关问题