84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我有個平台是有簽到功能的,我需要判斷這個用戶連續在這個平台上簽到多少天了 給他不同的積分。 例如今天是4月26號,從4月15號開始每天都簽到了,那就是連續簽到12天,4月13號也簽到了,但是4月14號沒簽到,mysql語句怎麼寫呢
一般都會存儲一下連續簽到的天數的,如果沒有存儲,我們以前做過的一個方式是我們簽到是採用時間戳存儲的然後獲取簽到的時間戳,一般我們都是獲取一個月的(如果這個月簽到滿了,就在取得一次前一個月的),然後在php 裡面循環一下天數計算出來的。後來這種方式比較慢,我們就單獨記錄簽到天數了
資料庫設計問題.因為要統計連續天數,不可能每天都記錄一條(想像一下銀行記錄用戶任意天數的餘額).會計上的做法叫年積數的演算法.即記錄某個時間點至另一時間點餘額不變(連續)表設計,大致如下:
結束時間-起始時間=天數.積分換算,就像稅金那樣,加成計算就行了.
你的業務規則裡,應該有個連續 x 天的給多少分的上限,例如連續天>=20則給多少積分。
那我們記得這個 x,在db裡 select * from tb where uid = 10086 order by dt desc limit x
接著在程式裡判斷最多連續了多少天,加上對應的分數即可。
一般都會存儲一下連續簽到的天數的,如果沒有存儲,我們以前做過的一個方式是我們簽到是採用時間戳存儲的然後獲取簽到的時間戳,一般我們都是獲取一個月的(如果這個月簽到滿了,就在取得一次前一個月的),然後在php 裡面循環一下天數計算出來的。後來這種方式比較慢,我們就單獨記錄簽到天數了
資料庫設計問題.
因為要統計連續天數,不可能每天都記錄一條(想像一下銀行記錄用戶任意天數的餘額).
會計上的做法叫年積數的演算法.即記錄某個時間點至另一時間點餘額不變(連續)
表設計,大致如下:
結束時間-起始時間=天數.積分換算,就像稅金那樣,加成計算就行了.
你的業務規則裡,應該有個連續 x 天的給多少分的上限,例如連續天>=20則給多少積分。
那我們記得這個 x,在db裡 select * from tb where uid = 10086 order by dt desc limit x
接著在程式裡判斷最多連續了多少天,加上對應的分數即可。