2011-09-14 5 views
4

データベースに何らかのユーザーアクションXを保存します。MySQLで異なる数値を編集するには?

X_actions --- Time --- New_actions 
Name1 - 19:07 - 3 
Name2 - 19:10 - 1 

そのアクションを意味します

User does action X at 19:07 
User does action Y at 19:08 
User does action Y at 19:08 
User does action X at 19:10 
User does action Y at 19:12 

は今、私は私のデータベース内の次の値が設定されていますユーザーが別のアクションYを行う場合は、フィールドに「New_actionsは」は、例えばだから、1でカウントですYはName1の後に2回、Name2の後に1回行われました。あなたが私を理解してくれるといいなあしかし、私はそれについての質問があります。 1時間ごとに2つのアクションを削除する必要があります。 Name1の 'New_actions'フィールドは1に編集する必要がありますが、2回目のName1を0に編集し、Name2も編集するにはどうすればよいですか?

+2

私はあなたの特定の質問を理解するのが難しいです。アクションの前にテーブル#1(列と行)とアクションの後にテーブル#2を描くと、非常に迅速な回答が得られます。 – danorton

+0

あなたの返事をありがとう。つまり、SQLは最初の行を編集する必要がありますが、フィールド 'New_actions'の値が0に達すると、2行目の値を編集する必要があります。それが0に達すると、スクリプトは3行目の値を編集する必要があります。 – Jordy

答えて

1
SET @remove := 2; 

UPDATE my_table 
SET New_actions = 
    IF(New_actions >= @remove, 
     (@remove := 0) + New_actions - @remove, 
     IF(@remove := @remove - New_actions, 0, 0)) 
WHERE New_actions <> 0 
ORDER BY my_table.Time; 

をしたいようだ:

+------+-------------+ 
| Time | New_actions | 
+------+-------------+ 
| 1 |   3 | 
| 2 |   3 | 
| 3 |   3 | 
+------+-------------+ 
+------+-------------+ 
| 1 |   1 | 
| 2 |   3 | 
| 3 |   3 | 
+------+-------------+ 
+------+-------------+ 
| 1 |   0 | 
| 2 |   2 | 
| 3 |   3 | 
+------+-------------+ 
+------+-------------+ 
| 1 |   0 | 
| 2 |   0 | 
| 3 |   3 | 
+------+-------------+ 
0

ブロックの上に3回実行した結果であるここでは、物事を単純化するためにINT時間]列を使用しますが、ストアドプロシージャ:)

http://dev.mysql.com/doc/refman/5.0/fr/stored-procedures.html

+0

私はこれをどのように使うことができるのか分からないと思います.-(お手伝いできますか?ありがとう;-) – Jordy

+0

ジョブを実行するストアドプロシージャAddActions(タイプ[x/y])を作成することができます行動やものの...)。さらに、Date列を追加し、2時間以上経過した行をフィルタリングする必要があります。 – ykatchou

+0

はい、それは問題ですが、時間が経つわけではありません。 SQLは最初の行を編集する必要がありますが、フィールド 'New_actions'の値が0に達すると、2行目の値を編集する必要があります。そして、それが0に達していれば、スクリプトは3行目の値を編集する必要があります。あなたが私を理解することを願っています;-)(または私はあなたを理解しません;-) – Jordy

関連する問題