t
をmysqlテーブルに、n
を整数カラムにします。式n - 10
が1回だけ計算されるように、次のクエリを変更できる場合は、私は興味があります。mysqlの更新ステートメントのユーザ変数
UPDATE t SET n = if(n - 10 < 1, 1, n - 10) WHERE n = 5;
クエリは意味がない、私は知っているが、私は値10
と5
は、PHPの変数になり、実際のアプリケーションで同じパターンを使用する必要があります。
t
をmysqlテーブルに、n
を整数カラムにします。式n - 10
が1回だけ計算されるように、次のクエリを変更できる場合は、私は興味があります。mysqlの更新ステートメントのユーザ変数
UPDATE t SET n = if(n - 10 < 1, 1, n - 10) WHERE n = 5;
クエリは意味がない、私は知っているが、私は値10
と5
は、PHPの変数になり、実際のアプリケーションで同じパターンを使用する必要があります。
私はようやく正しい構文を見つけました。 @tmp := n - 10
のまわりのかっこが重要です。
UPDATE t SET n = if((@tmp := n - 10) < 1, 1, @tmp) WHERE n = 5;
ありがとう、私はこの正確なことをやろうとしていたし、かっこを追加することでそれが機能しました。 –
あなただけのPHPで、このようなロジックを実行できます。
$value = $n - 10;
$value = $value < 1 ? 1 : $value;
$sql = "UPDATE t SET n = $value WHERE n = $n";
ありがとうございますが、私の事例をあまり単純化したかもしれません。実際、テーブルの他の列に基づいてnの結果値を導き出す必要があります。 – clime
をあなたは一度だけ正確に計算とはどういう意味ですか? – JohnFx
それが気になるのはなぜですか。実際にDBに結果を書き込むのは何百万倍も高速になります。 –
さて、これは2回計算されます(ifのすべてのオカレンスに対して)。 @tmp:= n-10のようなユーザー変数への代入で、n-10式が一度しか存在しないようにします。しかし、正確な構文はわかりません。 – clime