2012-01-27 20 views
3

tをmysqlテーブルに、nを整数カラムにします。式n - 10が1回だけ計算されるように、次のクエリを変更できる場合は、私は興味があります。mysqlの更新ステートメントのユーザ変数

UPDATE t SET n = if(n - 10 < 1, 1, n - 10) WHERE n = 5; 

クエリは意味がない、私は知っているが、私は値105は、PHPの変数になり、実際のアプリケーションで同じパターンを使用する必要があります。

+0

をあなたは一度だけ正確に計算とはどういう意味ですか? – JohnFx

+0

それが気になるのはなぜですか。実際にDBに結果を書き込むのは何百万倍も高速になります。 –

+0

さて、これは2回計算されます(ifのすべてのオカレンスに対して)。 @tmp:= n-10のようなユーザー変数への代入で、n-10式が一度しか存在しないようにします。しかし、正確な構文はわかりません。 – clime

答えて

3

私はようやく正しい構文を見つけました。 @tmp := n - 10のまわりのかっこが重要です。

UPDATE t SET n = if((@tmp := n - 10) < 1, 1, @tmp) WHERE n = 5; 
+0

ありがとう、私はこの正確なことをやろうとしていたし、かっこを追加することでそれが機能しました。 –

0

あなただけのPHPで、このようなロジックを実行できます。

$value = $n - 10; 
$value = $value < 1 ? 1 : $value; 
$sql = "UPDATE t SET n = $value WHERE n = $n"; 
+1

ありがとうございますが、私の事例をあまり単純化したかもしれません。実際、テーブルの他の列に基づいてnの結果値を導き出す必要があります。 – clime

関連する問題