2011-11-25 7 views
0

に応じてで複数の行を更新 - 私は現在、(ループ内で)持っている:MySQLはかつて私は、ウェブサイト上でいくつかのMySQLのクエリを最適化しようとしている、と私は暗礁のビットをヒットしてきた2つのフィールド

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

と私はすべて1つのクエリでこれを実行するためにそれを最適化したい - 私はWHERE field2 IN =を(使用することができます知っている何FIELD3がなかった場合)、私はのようなクエリを行うことができることを知っている:

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

これは一度に数千の行になるだろうし、非常にハッキーです - 誰も解決策を考えることができますか?

答えて

0

さて、あなたの$ some_valueのそれぞれの値は、時間にわたって比較的一貫している場合、アップデートを実行するために、ビューにそれらを回し、そのビューに対して参加することができます:

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

フィールド2とフィールド3は他のテーブルの外部キーなので、ちょうどほぼすべてのクエリでさまざまな値の組み合わせになると思います。 – Yawn

+0

さまざまな組み合わせをすべて表示するようにビューを構築する方法はありませんか?組合でさえも? –

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; 
関連する問題