for mysql中的每个循环

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

我有一个5列的mysql表。

  • 转换id是一个自动递增的主键
  • element\u id是文章的id
  • 语言代码是文章的语言
  • trid是元素为翻译的原始帖子/文章的id
  • 源语言代码是原文/文章的语言
  1. +----------------+------------+---------------+------+----------------------+
  2. | translation_id | element_id | language_code | trid | source_language_code |
  3. +----------------+------------+---------------+------+----------------------+
  4. | 1 | 1 | hu | 1 | hu |
  5. | 2 | 2 | hu | 2 | hu |
  6. | 3 | 3 | hu | 3 | hu |
  7. | 4 | 4 | hu | 4 | hu |
  8. | 5 | 5 | en | 1 | hu |
  9. | 6 | 99 | en | 2 | hu |
  10. | 7 | 27 | en | 3 | hu |
  11. | 8 | 8 | en | 4 | hu |
  12. | 9 | 9 | es | 1 | hu |
  13. | 10 | 10 | es | 2 | hu |
  14. | 11 | 11 | es | 3 | hu |
  15. | 12 | 12 | es | 4 | hu |
  16. | 13 | 13 | nl | 1 | hu |
  17. | 14 | 14 | nl | 2 | hu |
  18. | 15 | 55 | nl | 3 | hu |
  19. | 16 | 16 | nl | 4 | hu |
  20. | 17 | 77 | fr | 1 | hu |
  21. | 18 | 18 | fr | 2 | hu |
  22. | 19 | 19 | fr | 3 | hu |
  23. | 20 | 20 | fr | 4 | hu |
  24. +----------------+------------+---------------+------+----------------------+

我在上面的表格,你可以看到匈牙利人( 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 匹配匈牙利邮政。

  1. FOR EACH `element_id` AS hungarian FROM `table` WHERE `language_code` = "hu" {
  2. SELECT `element_id` AS english FROM `table` WHERE `trid` = hungarian AND `language_code` = "en";
  3. UPDATE `table` SET `trid` = english WHERE `trid` = hungarian;
  4. }

目标输出

  1. +----------------+------------+---------------+------+----------------------+
  2. | translation_id | element_id | language_code | trid | source_language_code |
  3. +----------------+------------+---------------+------+----------------------+
  4. | 1 | 1 | hu | 5 | en |
  5. | 2 | 2 | hu | 99 | en |
  6. | 3 | 3 | hu | 27 | en |
  7. | 4 | 4 | hu | 8 | en |
  8. | 5 | 5 | en | 5 | en |
  9. | 6 | 99 | en | 99 | en |
  10. | 7 | 27 | en | 27 | en |
  11. | 8 | 8 | en | 8 | en |
  12. | 9 | 9 | es | 5 | en |
  13. | 10 | 10 | es | 99 | en |
  14. | 11 | 11 | es | 27 | en |
  15. | 12 | 12 | es | 8 | en |
  16. | 13 | 13 | nl | 5 | en |
  17. | 14 | 14 | nl | 99 | en |
  18. | 15 | 55 | nl | 27 | en |
  19. | 16 | 16 | nl | 8 | en |
  20. | 17 | 77 | fr | 5 | en |
  21. | 18 | 18 | fr | 99 | en |
  22. | 19 | 19 | fr | 27 | en |
  23. | 20 | 20 | fr | 8 | en |
  24. +----------------+------------+---------------+------+----------------------+
p5fdfcr1

p5fdfcr11#

使用 UPDATE 使用自联接:

  1. UPDATE yourTable AS t1
  2. JOIN yourTable AS t2 ON t1.trid = t2.trid
  3. SET t1.trid = t2.element_id, t1.source_language_code = 'en'
  4. WHERE t2.language_code = 'en';

演示
由于要更改所有行,因此不需要进行测试 language_code = 'hu' .

相关问题