[英]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.