2011-06-28 4 views
1
UPDATE myTable SET niceColumn=1 WHERE someVal=1; 

SELECT * FROM myTable WHERE someVal=1; 

これら2つのクエリを1つに結合する方法はありますか?つまり、更新クエリを実行して更新する行を表示することができます。ここでは、「id = 1」のフィルタリングを2回使用しているため、これは必要ありません。また、someValがselectクエリの前に変更された場合、私は取得したものについて問題を抱えていると思います(ex:アップデートの更新とその後のsomeValは他のスクリプトのため0になります)。mysqlクエリを更新して表示する

+0

あなたがこれをしたくない理由は何ですか? – Jacob

+0

は、それが更新する行がいくつかの値を持つ行を選択するよりも異なることを示しています... – amosrivera

+0

私は同じ仕事を2回したくありません、私は大きなテーブルを持っているとします。 – denizeren

答えて

2

ラップ更新と選択の間の所望のISOLATION LEVEL他のスレッドは影響を与えないことができないようにロックされた行との取引における2つのクエリ。

0

実際のコードでは、条件部分(場所など)が長すぎて繰り返すことができない場合は、両方のクエリで使用する変数に入れてください。

問題が発生していない限り、これらの2つを組み合わせる必要はありません。

+1

いいえあなたは2つのクエリを1つのmysql_queryに入れることはできません – genesis

+0

ああ、私は実際に試したことはありませんが、まったくあなたは= /私の悪いと思っていました。 – Kokos

0

実際には、更新した行の一部が表示されるため、更新した行は表示されません。

そして、これは昨日の更新も含め、すべてのレコードを表示します:)

私は行が変更されたかを正確に確認したい場合は、私は一時テーブルとなるだろう。まず、更新するすべての行IDをテンポラリ・テーブルに選択します。次に、一時表の生IDに基づいて更新を実行し、一時表を戻します。

CREATE TEMPORARY TABLE to_be_updated 
SELECT id 
FROM myTable 
WHERE someVal = 1; 

UPDATE myTable 
SET niceColumn = 1 
WHERE id IN (SELECT * FROM to_be_updated); 

SELECT * 
FROM myTable 
WHERE id IN (SELECT * FROM to_be_updated) 
関連する問題