iT邦幫忙

1

資料庫欄位設定日期重製單一欄位歸零

我想做個會員紅利到了1/1 00:00:00會重新來過讓值歸零

我網路上查的資料
是寫PHP用SQL改去資料庫
再利用排程去做

我想請問除了這個方法外
還有其他辦法嗎??

thwu iT邦新手 5 級 ‧ 2019-03-25 10:33:36 檢舉
也許把記錄會員紅利的資料表結構說明出來,會比較容易給予建議
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
小魚
iT邦大師 1 級 ‧ 2019-03-24 18:29:40

我之前的做法是直接做一個表,
把每年的值分開,
只抓當年的值.

看更多先前的回應...收起先前的回應...
scjh8214 iT邦新手 5 級 ‧ 2019-03-24 20:45:01 檢舉

所以紅利要與會員資料分成兩張表來處理嗎?

小魚 iT邦大師 1 級 ‧ 2019-03-25 00:01:21 檢舉

我不知道你們怎麼做的,
所以沒辦法給建議.

犬千賀 iT邦新手 3 級 ‧ 2019-03-25 11:01:14 檢舉

我也建議分成兩張表處裡...

小魚 iT邦大師 1 級 ‧ 2019-03-25 11:36:44 檢舉

喔喔, 看懂了,
原來是紅利點數,
那跟我之前那個不一樣,
我目前類似功能的作法是會有另外一張表紀錄細節,
但是每次紅利點數異動會同時更新這個使用者的紅利點數,
(因為如果直接改點數一方面沒有細節要查很難查,
另外一方面如果兩個地方同時對資料庫做動作有可能會出現資料遺失的問題,直接Insert資料才不會有遺漏)
另外也會在使用者資料表建立紅利點數欄位,
但是資料來源是紅利點數的那張表,
之所以要建立紅利點數欄位是因為另外一張表資料多的時候,
查詢會變慢,
客戶會抱怨...

thwu iT邦新手 5 級 ‧ 2019-03-25 14:58:50 檢舉

小魚的做法,在遇到樓主希望1/1歸零紅利的需求時,應該也是必須用排程去清除/更新紅利點數

小魚 iT邦大師 1 級 ‧ 2019-03-25 15:09:20 檢舉

這樣說也是,
如果沒有處理到這個人的紅利,
剛想到另一個作法是抓紅利的時候先更新再抓,
就不用排程了.

froce iT邦大師 1 級 ‧ 2019-03-25 15:37:43 檢舉

客戶登錄時去清空過期紅利就好,幹嘛要排程?

小魚 iT邦大師 1 級 ‧ 2019-03-25 17:44:01 檢舉

登入的時候也可以,
才不會執行太多次.

thwu iT邦新手 5 級 ‧ 2019-03-25 17:48:32 檢舉

雖然可以利用事件觸發(會員登錄、查紅利)的時間點執行更新 job,但如果是此資料結構,我個人仍比較習慣用排程去處理。

原因:

  • 會員的紅利紀錄是有時序的,將紅利減為 0 的記錄在 1/1 00:00:00 時產生比較合理,會員看了也不太會有問題。
  • 用事件觸發方式來設計時,要注意如果事件一直沒被觸發,那該會員的紅利紀錄不會被變更。意思是如果單純用 SELECT SUM([紅利]) 的方式去查,那計算結果就錯了。
小魚 iT邦大師 1 級 ‧ 2019-03-25 18:59:36 檢舉

thwu
這問題應該要看需求,
如果只有使用者自己會看到,
那就自己觸發事件的時候處理就好了,
如果是要給其他人看的,
可能還是要排程比較好.

0
PPTaiwan
iT邦好手 1 級 ‧ 2019-03-24 19:50:36

應該用 DateTime 來進行排除才是,寫個預存程序將邏輯寫到裡面吧!!

scjh8214 iT邦新手 5 級 ‧ 2019-03-24 20:45:13 檢舉

寫在資料庫嗎?

0
混水摸魚
iT邦研究生 2 級 ‧ 2019-03-25 08:55:10

你應該是在找這個
https://www.webteach.tw/?p=114

另建議你要多個table去存log,去記錄清空前的紅利點數是多少,以免客戶那邊有爭議的時候你無法做返回的動作。

我要發表回答

立即登入回答