php mysql更新所有字段

时间:2015-01-23 20:14:36

标签: php mysql

很抱歉提出一个微不足道的问题。我想翻译我的数据库中有一百万行的一些字段。所以我想做的是 读取字段1并执行转换功能并将其写入字段3,并且需要将字段2分别写入字段4。

初始表 field id | field 1 | field 2 | field 3 | field 4 |
 1 |苹果|梨|空|空|
 2 |香蕉|菠萝|空|空|

最终结果表翻译(苹果) - yabloko

字段id |字段1 |字段2 |字段3 |字段4 |
 1 |苹果|梨| yablogo | grusha |
 2 |香蕉|菠萝|巴南|凤梨|

我已经有了翻译功能,问题是如何执行 这一百万行。如何正确构建循环? (肯定会丢失一些ID,因为删除了一些数据)。

提前非常感谢!!!

1 个答案:

答案 0 :(得分:0)

规范模式不是“构造循环”并逐行处理,而是在单个语句中执行操作。

我会填充一个翻译表:

CREATE TABLE my_translation
( old_word VARCHAR(100) NOT NULL PRIMARY KEY
, new_word VARCHAR(100)
) Engine=InnoDB;
INSERT INTO my_translation (old_word, new_word) VALUES
 ('apple'    ,'yablogo')
,('pear'     ,'grush')
,('banana'   ,'banan')
,('pineapple','ananas);

然后进行更新。如果没有匹配,那么棘手的部分是field_3field_4未经修改。

UPDATE my_table t
  LEFT 
  JOIN my_translation c3
       ON c3.old_word = t.field_1
  LEFT 
  JOIN my_translation c4
       ON c4.old_word = t.field_2
   SET t.field_3 = IF(c3.old_word IS NULL,t.field_3,c3.new_word)
     , t.field_4 = IF(c4.old_word IS NULL,t.field_4,c4.new_word)

注意:如果这是一次性操作,我可能会考虑将其作为INSERT插入到新表中,然后交换表名并更改外键引用,以将新表放在旧表的位置