0

私は mysql データベースに情報を保存するサーバー上の javascript でビデオ ゲームを書いています。単純なヒーリング ポーション アイテムに最初の効果を付けようとしています。エフェクトを実装するには、spell_id を使用してスペル テーブルを呼び出し、サーバーで実行するコードを含む effect というフィールドを取得します。eval() 関数を使用して、文字列内のコードを実行します。ゲームを最適化するために、できるだけ少ないクエリを実行したいと考えています。この例では (答えは他の同様の効果を評価するのに役立つと思います)、「健康」のような統計列を含む「プレイヤー」テーブルを更新したいと思います 次に、減少する数15になるnを追加し、250ミリ秒後に14を追加し、n = 1になるまで13を追加します。正味の効果は、ヘルスの大きなジャンプであり、プレイヤーのヘルスが到達した場合、これを達成するのは比較的簡単です。彼の最大許容制限効果はすぐに停止します...しかし、ヘルス> max_healthであるかどうかを確認し、プレーヤーのヘルスがそうでないことを確認するために、250ミリ秒ごとに選択して更新するのではなく、増加ごとに1つの更新ステートメントを実行したいと思います彼の最大体力を超えます。少し余談ですが、このデータが与えられた単一の更新が必要です max_health を調整し、プレイヤーのヘルスが最大ヘルスを超えないようにします。少し余談ですが、このデータが与えられた単一の更新が必要です max_health を調整し、プレイヤーのヘルスが最大ヘルスを超えないようにします。少し余談ですが、このデータが与えられた単一の更新が必要です

player_id   health   max_health
=========   ======   ==========
1           90       100

(max_health-health) < 15 でない限り、ヘルスに 15 を追加します... この場合、10 だけ追加する必要があります。

より簡単な解決策は、更新するたびにヘルスと最大ヘルスを返すことができる場合です。ヘルス> max_health更新ヘルスセットヘルス=最大ヘルスの場合、最終的な擬似コードを実行してもかまいません

そのため、更新後にフィールドを返す方法を誰かが説明できれば役立ちます。または、更新内でロジックを使用する方法を誰かが示すことができれば、それも役立ちます。

また、十分な情報を提供できなかった場合は、申し訳ありませんが、質問を理解しにくくしたくなかったので、さらに提供していただければ幸いです。

4

2 に答える 2

2
update health
set health = least(max_health, health +<potion effect>)
where player_id = ...

編集

あなたの他の質問について:通常、更新は影響を受ける行の数を返すと思います。したがって、ヘルスが既に = max_health のときにヘルスを更新しようとすると、0 が返されます。

たとえば、phpでこれを行う方法は知っていますが、javascriptを使用している場所を教えてくれました...だから?

http://dev.mysql.com/doc/refman/5.6/en/update.html

UPDATE は、実際に変更された行数を返します。mysql_info() C API 関数は、一致して更新された行数と、UPDATE 中に発生した警告の数を返します。

于 2012-06-29T15:50:51.177 に答える
0

ANSI標準のCASE関数を使用するか、他の回答のようにmysqlの機能を最小限に抑えます。

UPDATE player
SET health = CASE WHEN health + [potion] > max_health 
             THEN max_health  
             ELSE health + [potion] 
             END CASE
WHERE player_id = [player_id]
于 2012-06-29T16:04:38.863 に答える