?
          前一段給客戶做了一個(gè),客戶管理系統(tǒng),系統(tǒng)里設(shè)計(jì)到了用戶的積分問(wèn)題。
          積分要求是:
          1、用戶每消費(fèi)一元,積分自動(dòng)加1
          2、從用戶注冊(cè)日開始,每過(guò) 一天,用戶的積分自動(dòng)加1。
          3、有特殊原因,管理員可以通過(guò)后臺(tái)給用戶加分或減分。
          4、積分可以用來(lái)兌獎(jiǎng),兌獎(jiǎng)后,自動(dòng)減去相應(yīng)的積分。
          ?
          涉及到4個(gè)表:
          1、clubuser用戶表,2、consumelog記錄用戶的消費(fèi)日志,3、scoreadd管理員為用戶加的分。4、prizelog用戶兌換過(guò)的獎(jiǎng)品。
          ?
          原來(lái)的系統(tǒng)實(shí)現(xiàn)是:
          要求1:
          他們的消費(fèi)記錄通常是導(dǎo)入的,每次導(dǎo)入后,需要重新計(jì)算一下所有用戶的積分。
          要求2:
          用APPLICATION保存最后更新用戶積分的時(shí)間,然后和當(dāng)天判斷,如果是不是當(dāng)天,就給用戶加分,設(shè)置APPLICATION為當(dāng)天,如果是,就不進(jìn)行操作。
          要求3:
          管理員為某個(gè)用戶加過(guò)分以后,重新計(jì)算一下這個(gè)用戶的積分。
          要求4:
          用戶兌獎(jiǎng)后,要重新計(jì)算一下他的積分。
          ?
          感覺(jué)不是他合理:
          1、導(dǎo)入后計(jì)算所有用戶的積分不合理,因?yàn)椋?jì)算積分是很麻煩的,要把用戶的消費(fèi)積分,在網(wǎng)積分,管理員加的積分全部加起來(lái),然后減去消費(fèi)積分得出來(lái),寫入用戶表。如果用戶多了,消費(fèi)記錄多了,算起來(lái)要好幾分鐘。
          2、每次都要判斷APPLCATION的狀態(tài),感覺(jué)不合理。
          3,4也不是太合理,都要重新計(jì)算用戶的積分,感覺(jué)不合理。
          ?
          所以做了調(diào)整。
          ?
          1、3、4分別在表,consumelog,scoreadd,prizelog表中寫觸發(fā)器
          2、建立一個(gè)作業(yè),在每天0:00:00的時(shí)候?yàn)樗杏脩艏?分。
          ?
          實(shí)現(xiàn)細(xì)節(jié):
          1、表 consumelog 觸發(fā)器
          添加記錄
          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觸發(fā)器
          添加記錄
          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
          (這個(gè)表不存在刪除)
          ?
          4、prizelog觸發(fā)器
          添加記錄
          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、作業(yè)的建立
          SQL SERVER--》管理--》SQL SERVER代理--》作業(yè)--》新建作業(yè)
          常規(guī) --名稱:”每天添加金色俱樂(lè)部會(huì)員積分“
          步驟--》新建...--》名稱 ”添加分?jǐn)?shù)'--》類型:TSQL--》數(shù)據(jù)庫(kù):你要操作的數(shù)據(jù)庫(kù)--》命令:
          update clubuser set score=score+1
          調(diào)度 --》名稱--》調(diào)度類型--》反復(fù)出現(xiàn)--》每天1次-->時(shí)間:0:00:00
          ?
          點(diǎn) 確定保存。
          ?
          在 作業(yè)列表中就有一個(gè) 作業(yè),名稱是 每天添加金色俱樂(lè)部會(huì)員積分
          啟動(dòng)該作業(yè)前要先啟動(dòng)SQL SERVERAGENT,并設(shè)置為隨系統(tǒng)啟動(dòng),OK了。
          ?
          這樣做以后,只需要添加消費(fèi)記錄,加分記錄,領(lǐng)取獎(jiǎng)品的記錄就可以了,不用每次操作都要考慮分?jǐn)?shù)了。
          posted on 2007-01-20 00:48 jackstudio 閱讀(660) 評(píng)論(0)  編輯  收藏 所屬分類: Database
          主站蜘蛛池模板: 如皋市| 贵定县| 宣恩县| 丹棱县| 华亭县| 什邡市| 清流县| 垫江县| 嵊泗县| 华安县| 科技| 河津市| 赣榆县| 慈溪市| 克什克腾旗| 商丘市| 晋江市| 南通市| 山阴县| 宜兰市| 黔南| 瑞丽市| 嵩明县| 宜昌市| 南汇区| 额敏县| 万盛区| 兴安盟| 临夏县| 永寿县| 江源县| 临洮县| 丹阳市| 兴义市| 逊克县| 竹山县| 宁强县| 玉屏| 北京市| 潍坊市| 将乐县|