我正在尝试在网站上优化一些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 - 有人能想到这个解决方案吗?
答案 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;