2017-05-25 2 views
0

ポイントを追加したりポイントを差し引く変数があります。
私のスコア表はありますが、スコアの値は常に0から20の間でなければなりません。
スコアが現在2で、変数$ valueが-3なら、この。更新された値は2つの値の間にとどまる必要があります

UPDATE table 
SET  field = GREATEST(0, field + $value) 
WHERE id = $id 

値が0より大きく20より大きくならないように方法がありますか?

+0

'設定フィールド=ケースフィールド+値<そして0時にフィールド+値>その後、20 20他のフィールド+値 – xQbert

+0

はあなたがデータベース層あなたにあなたのビジネスロジックを入れてもよろしいですend'?そのコードを上記の層にすることは、後で変更する方がはるかに簡単です。 –

答えて

1

ケース式を使用できます。

UPDATE [table] 
SET [field] = CASE 
        WHEN [field] + @value > 20 
         THEN 20 
        WHEN [field] + @value < 0 
         THEN 0 
        ELSE [field] + @value 
       END 
WHERE [id] = @ID; 
+0

正当なのですね、ありがとう! –

+0

喜んで助けてください!あなたに適した[回答を受け入れる](https://stackoverflow.com/help/accepted-answer)を覚えておいてください。 –

1

このようにGREATESTとLEASTを入れ子にして、あなたが望むものを達成することができます。

UPDATE table 
SET  field = GREATEST(0, LEAST(20, field + $value)) 
WHERE id = $id 
関連する問題