?
          前一段給客戶做了一個,客戶管理系統,系統里設計到了用戶的積分問題。
          積分要求是:
          1、用戶每消費一元,積分自動加1
          2、從用戶注冊日開始,每過 一天,用戶的積分自動加1。
          3、有特殊原因,管理員可以通過后臺給用戶加分或減分。
          4、積分可以用來兌獎,兌獎后,自動減去相應的積分。
          ?
          涉及到4個表:
          1、clubuser用戶表,2、consumelog記錄用戶的消費日志,3、scoreadd管理員為用戶加的分。4、prizelog用戶兌換過的獎品。
          ?
          原來的系統實現是:
          要求1:
          他們的消費記錄通常是導入的,每次導入后,需要重新計算一下所有用戶的積分。
          要求2:
          用APPLICATION保存最后更新用戶積分的時間,然后和當天判斷,如果是不是當天,就給用戶加分,設置APPLICATION為當天,如果是,就不進行操作。
          要求3:
          管理員為某個用戶加過分以后,重新計算一下這個用戶的積分。
          要求4:
          用戶兌獎后,要重新計算一下他的積分。
          ?
          感覺不是他合理:
          1、導入后計算所有用戶的積分不合理,因為,計算積分是很麻煩的,要把用戶的消費積分,在網積分,管理員加的積分全部加起來,然后減去消費積分得出來,寫入用戶表。如果用戶多了,消費記錄多了,算起來要好幾分鐘。
          2、每次都要判斷APPLCATION的狀態,感覺不合理。
          3,4也不是太合理,都要重新計算用戶的積分,感覺不合理。
          ?
          所以做了調整。
          ?
          1、3、4分別在表,consumelog,scoreadd,prizelog表中寫觸發器
          2、建立一個作業,在每天0:00:00的時候為所有用戶加1分。
          ?
          實現細節:
          1、表 consumelog 觸發器
          添加記錄
          CREATE TRIGGER? addscore ON [dbo].[consumelog]
          FOR INSERT
          AS
          declare @num as int
          declare @uid as int
          select @num=cmoney,@uid=userid from [inserted]
          update clubuser set score=score+@num/2 where id=@uid
          刪除記錄
          CREATE TRIGGER decscore ON [dbo].[consumelog]
          FOR DELETE
          AS
          declare @num as int
          declare @uid as int
          select @num=cmoney,@uid=userid from [deleteed]
          update clubuser set score=score-@num where id=@uid
          3、scoreadd觸發器
          添加記錄
          CREATE TRIGGER? otheraddscore ON [dbo].[scoreadd]
          FOR INSERT
          AS
          declare @num int
          declare @uid int
          select @num=score,@uid=userid from [inserted]
          update clubuser set score=score+@num where id=@uid
          (這個表不存在刪除)
          ?
          4、prizelog觸發器
          添加記錄
          CREATE TRIGGER prizedecscore ON [dbo].[prizelog]
          FOR INSERT
          AS
          declare @num int
          declare @uid int
          declare @prid int
          select @prid=prizeid,@uid=userid from [inserted]
          select @num=Score from prize where id=@prid
          update clubuser set score=score-@num where id=@uid
          ?
          刪除記錄
          CREATE TRIGGER prizeaddscore ON [dbo].[prizelog]
          FOR Delete
          AS
          declare @num int
          declare @uid int
          declare @prid int
          select @prid=prizeid,@uid=userid from [deleted]
          if @@rowcount>0
          ?begin
          ?? select @num=score from prize where id=@prid
          ?? update clubuser set score=score+@num where id=@uid
          ?end
          ?
          2、作業的建立
          SQL SERVER--》管理--》SQL SERVER代理--》作業--》新建作業
          常規 --名稱:”每天添加金色俱樂部會員積分“
          步驟--》新建...--》名稱 ”添加分數'--》類型:TSQL--》數據庫:你要操作的數據庫--》命令:
          update clubuser set score=score+1
          調度 --》名稱--》調度類型--》反復出現--》每天1次-->時間:0:00:00
          ?
          點 確定保存。
          ?
          在 作業列表中就有一個 作業,名稱是 每天添加金色俱樂部會員積分
          啟動該作業前要先啟動SQL SERVERAGENT,并設置為隨系統啟動,OK了。
          ?
          這樣做以后,只需要添加消費記錄,加分記錄,領取獎品的記錄就可以了,不用每次操作都要考慮分數了。
          posted on 2007-01-20 00:48 jackstudio 閱讀(654) 評論(0)  編輯  收藏 所屬分類: Database
          主站蜘蛛池模板: 赣榆县| 新巴尔虎右旗| 林周县| 旺苍县| 定襄县| 集贤县| 玉山县| 宜丰县| 社旗县| 鹿邑县| 清河县| 安西县| 崇仁县| 山阳县| 贵溪市| 榆中县| 商都县| 镇康县| 远安县| 都安| 许昌市| 基隆市| 太湖县| 留坝县| 通州区| 河间市| 包头市| 凤台县| 唐河县| 双桥区| 六盘水市| 文化| 侯马市| 江城| 洱源县| 松滋市| 洪湖市| 武宁县| 清苑县| 青河县| 灵山县|