我有個(gè)平臺是有簽到功能的,我需要判斷這個(gè)用戶連續(xù)在這個(gè)平臺上簽到多少天了 給他不同的積分。
例如今天是4月26號,從4月15號開始每天都簽到了,那就是連續(xù)簽到12天,4月13號也簽到了,但是4月14號沒簽到,
mysql語句怎麼寫呢
一般都會存儲一下連續(xù)簽到的天數(shù)的,如果沒有存儲,我們以前做過的一個(gè)方式是我們簽到是採用時(shí)間戳存儲的然後獲取簽到的時(shí)間戳,一般我們都是獲取一個(gè)月的(如果這個(gè)月簽到滿了,就在取得一次前一個(gè)月的),然後在php 裡面循環(huán)一下天數(shù)計(jì)算出來的。後來這種方式比較慢,我們就單獨(dú)記錄簽到天數(shù)了
資料庫設(shè)計(jì)問題.
因?yàn)橐y(tǒng)計(jì)連續(xù)天數(shù),不可能每天都記錄一條(想像一下銀行記錄用戶任意天數(shù)的餘額).
會計(jì)上的做法叫年積數(shù)的演算法.即記錄某個(gè)時(shí)間點(diǎn)至另一時(shí)間點(diǎn)餘額不變(連續(xù))
表設(shè)計(jì),大致如下:
結(jié)束時(shí)間-起始時(shí)間=天數(shù).積分換算,就像稅金那樣,加成計(jì)算就行了.
你的業(yè)務(wù)規(guī)則裡,應(yīng)該有個(gè)連續(xù) x 天的給多少分的上限,例如連續(xù)天>=20則給多少積分。
那我們記得這個(gè) x,在db裡 select * from tb where uid = 10086 order by dt desc limit x
接著在程式裡判斷最多連續(xù)了多少天,加上對應(yīng)的分?jǐn)?shù)即可。