MySQL根据2个字段一次更新多行

时间:2011-11-25 18:37:43

标签: mysql

我正在尝试在网站上优化一些mysql查询,而且我遇到了一些障碍 - 我目前有(在一个循环中):

UPDATE `table` SET `field1` = `field1` + 1 WHERE `field2` = '$some_value' AND `field3` = '$another_value'

我希望优化它以在1个查询中执行此操作 - 如果没有field3我知道我可以使用WHERE field2 = IN()并且我知道我可以执行以下查询: / p>

UPDATE `table` SET `field1` = `field1` + 1 WHERE (`field2` = '$some_value' AND `field3` = '$another_value') OR (`field2` = '$some_value2' AND `field3` = '$another_value2') OR ...

但是,这将是几千行同时非常hacky - 有人能想到这个解决方案吗?

2 个答案:

答案 0 :(得分:0)

好吧,如果每个$ some_value的值随着时间的推移相对一致,您可以将它们转换为视图,然后加入该视图以执行更新:

UPDATE 
  table 
SET 
  field1 = field1+1 
FROM 
  myFilterView 
WHERE 
  table.field2=myFilterView.field2 AND 
  table.field3=myFilterView.field3

答案 1 :(得分:0)

您可以创建一个包含新数据的临时表(与原始表完全相同的列)。完成所有插入后,然后使用此数据更新表。

create temporary table temp (field1 int(5), field2 varchar(10), field3(varchar(10));

insert into t(field1, field2, field3) values (1, "abcd", "abcd"), (2, "efg", "efg"), etc

update tbl inner join t on t.field2 = tbl.field2 and t.field3 = tbl.field3
set tbl.field1 = t.field1 + 1;