2012-03-22 13 views
2

「id」、「user_id」、「points」、「datetime_gained」に似た構造のreward_pointsテーブルがあります。Mysqlは、単一クエリで行を徐々に更新します。

各user_idには、それぞれ複数の報酬ポイントを持つ複数の行を設定できます。利用可能なポイントの合計は、すべての行の合計です(user_idによって参照されます)。

ユーザーがポイントを使っている場合は、ポイントの合計から最も古いポイントからポイントを差し引く必要がありますdate time_gainedフィールド)を使用して、次の最も古いものを順番に使用して、割り当てられたすべてのポイントが割り当てられます。

これは明らかにスクリプト言語では簡単にはできませんが、純粋なMySQLを使用していますか?

答えて

3

現在のトランザクションスタイルの構造では、実際にポイントを減算する代わりに、負のポイント値を持つ新しい行を挿入する方が良いでしょうか? SUMはあなたに新しい差し引き残高を与えます。

元の行からまっすぐに差し引くことで、そのデータが無効になります。ユーザーが3/1で5点を得た後、今日2点を費やした場合、データベースは3/1で3点を得たことをデータベースに示します(間違っています)。新しい行を追加すると、ユーザーは3/1で5ポイントを獲得し、今日は2ポイントを失ったことがわかります。

+1

これはまさに私が持っていたのと同じ考えです。あなたは速すぎました。 – DonCallisto

+0

素早い応答をありがとう。あなたの提案は、おそらくより良い方法です。 – Alistair

関連する問題