人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLでUPDATEの使い方・考え方について質問です。

以下のようなテーブル構成だとします。

+----+-----+----------+
+ id +point+ date +
+----+-----+----------+
+ 1 + 100 +2007-10-26+
+----+-----+----------+
+ 1 + 100 +2007-10-27+
+----+-----+----------+

こういう場合に、id=1のpointを150減らしたいとします。

上記2レコードを合算して、上のレコードのpointを0にし、下のpointを50に出来ればと思います。

そういう事って出来るのでしょうか?処理を分ければ出来ると思うのですが、よりシンプルで柔軟性のあるSQL文が書ければと思いますので、より良い方法をご存じの方は、アドバイスいただければと思います。

ちなみにMySQL4.0.26を使っています。もし上位バージョンで私が考えていることが可能なら、ご提案下さい。

●質問者: kt26
●カテゴリ:ウェブ制作
✍キーワード:2007-10-26 MySQL point SQL アドバイス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pyopyopyo
●35ポイント

可能ではありますが,一般的にはもっとシンプルに

1 -150 2007-10-27

と新しく "-150ポイント" のレコードを insert して

id=1 のポイント数を調べる時は

select sum(point) from テーブル名 where id == 1

とその都度合計を出すように設計&実装すると思います.

◎質問者からの返答

コメントにも書きましたが、「取得日の日付は変更しない」という定義が発生します。

例えば楽天ポイントなどでよくありますが、「○?○期間の間、このポイントが使用出来る」

という仕様にする場合、どのような考え方をすればいいか悩みます。

日付にとらわれなければ、おっしゃる方法でいいとは思いますが・・。


2 ● KUROX
●35ポイント

>「○?○期間の間、このポイントが使用出来る」

確定、失効という概念を導入すべきかと思います。

(1)履歴は、回答1やコメントに書かれているように普通にもつのが

一般的。銀行の通帳明細と同じ。

(2)使えるポイントは、別もちで管理する。(履歴と連動するけど)。

------

>コメントありがとうございます。では、「-50ポイント減らす」という場合の考え方ではどう

>なるのでしょうか?

>+ 1 + 100 +2007-10-26+

>のレコードから-50するわけですよね?

違います、新規にレコードを追加(INSERT)します。

◎質問者からの返答

つまり、ポイント処理があった時に、プラス/マイナスの場合でもポイント履歴にINSERTし、

合計ポイントのテーブルにはupdateするということですね?

ポイントの有効期間が切れる時は、履歴を消して合計ポイントにupdateするような。


[追記]

履歴に↓のように残るとして

id point date
1 100 2007-09-01
1 100 2007-10-01
1 -200 2007-10-30


10月分のポイントしか有効期限にしなかった時、9月のレコードを削除しますよね?

その場合、合計値は-100にするのではなく、0のままで良いのでしょうか?


考え方自体が間違っていたら、またご指摘下さい。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ