-1

私は2つのテーブルを持っています:user_valuesdecrease_times

user_values3つの列があります:username, property, valueおよびdecrease_times3つの列があります:property, decrease_value, decrease_time。これらはすべて動的であり、大きく変化します。

私は1時間ごとに呼び出されるcronジョブを持っています。私がやりたいのは、fromがfromと等しい場合に、格納されている量ですべてのvalue行をから減らすことです。user_valuesdecrease_valuepropertyuser_valuespropertydecrease_times

また、decrease_time0または1にすることができます。0は1時間ごとに減少する必要があることを意味し、1は24時間ごとに減少する必要があることを意味します。午前6時かどうかを検出するif句をすでに実装しており、1または0の場合はすべての値を減らす必要があります。

これを行うにはどのようなクエリを実行する必要がありますか?また、これはPHPで行われます。

編集:私がこれまでにしたことはこれです:UPDATE user_values SET value = value - (SELECT decrease_value FROM decrease_times WHERE property=/* property from UPDATE clase should be here */) WHERE property=(SELECT property FROM decrease_times WHERE decrease_time=0)

4

2 に答える 2

2

どこでもselectステートメントを使用する必要はありません...

UPDATE user_values AS values 
INNER JOIN decrease_times AS times ON values.property = times.property 
SET values.value = values.value-times.decrease_value
WHERE values.property = times.property AND times.decrease_time = 0

編集しようとしているテーブルを取得し、クエリ用に 2 番目のテーブルに結合しています...必要な単純な数式を使用して user_values テーブルに値フィールドを設定し、両方のプロパティ値が同じであることを確認します。同じであり、1 時間ごとに更新される予定の行のみを更新しています。

毎日のバージョンは同じですが、「AND...」以降は必要ありません

于 2013-02-28T00:33:58.603 に答える
-1

このようなものUPDATE TABLE SET your_value=(your_value-1) WHERE USERID=5

また

UPDATE TABLE1 SET your_value=(your_value +(SELECT your_value2+5 FROM TABLE2 WHERE USERID=5)) WHERE USERID=5

-- ニーズに合わせて調整します。これは基本的な SQL 構文です。

より良い例とテーブル構造が必要です - http://sqlfiddle.com/を使用して、テーブル/データの一部を再作成して、それで遊ぶことができます

http://www.w3schools.com/sql/sql_update.asp

于 2013-02-28T00:20:52.967 に答える