管理員在後臺配置,每次連續簽到的天數 然後贈送積分或者其他壹些優惠,還要設置每人是否領取壹次。
主表是簽到基本設置
規則是副表
然後用戶簽到是壹張表。現在糾結在如何去判斷用戶是否領取過。
是否還要添加壹張表?
評論 (1) ? 分享 ? 鏈接 ? 2015-10-18
0
簽到表
CREATE TABLE `signin` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, # ID
`cid` INTEGER UNSIGNED NOT NULL , # 角色ID
`signstatus` SMALLINT(1) NOT NULL DEFAULT 0, # 當天是否簽到 0-未簽到 1-普通玩家已簽到 2-vip玩家已簽到
`signdatetime` DATETIME DEFAULT '2012-01-01 12:12:12',# 簽到時間
`signtimes` SMALLINT NOT NULL DEFAULT 0, # 當月簽到天數
PRIMARY KEY (`id`),
FOREIGN KEY (cid) REFERENCES characters(cid) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8; – kolnick 2015-11-25
1個答案 票 數
yunzl
0 票
yunzl6
如果妳非要省張表
那就添壹列儲存數字的
然後我們來玩玩2進制
給妳壹串二進制,妳怎麽算成十進制?
1000 == 2^3 =8
0100 == 2^2 =4
0010 == 2^1 =2
0001 == 2^0 =1
(任何非0的0次冥為1)
也就是說 1111 = 2^3 + 2^2 + 2^1 + 2^0 = 15
可能妳會說臥槽這跟我的要求有什麽關系
妳不覺得 未領取or已領取很貼二進制麽。。。
0為未領取 1為已領取
好我們繼續
假設我們有4個領取活動
第壹個 新人領取活動
第二個 100天簽到領取活動
第三個 200天簽到領取活動
第四個 300天簽到領取活動
新人註冊了個號,點開了領取頁
服務器在簽到表裏取出了我讓妳添加的那列
是0
代碼機械的處理了起來
首先轉成2進制,還是0
""切割每個字符得到數組a
比如我們想知道這個新人的 第壹個 任務有沒有領取
那就判斷
$a[count($a)-1]是否空字符,空字符就等於沒領取(php取數組數量應該是count吧)
不是空字符再判斷是不是0,是0就等於沒領取
是1就是領取過了
同理$a[$a.Length-2]就是第二個任務,$a[$a.Length-3]就是第三個任務
那麽如何寫回去呢
新人看那個新人任務沒領取過,於是點了壹下
服務器同樣取出這個數字,轉2進制,切割,判斷$a[count($a)-1]是不是沒領取,
既然沒領取那咱麽就發獎勵吧
運行完發獎勵的程序後,開始寫入領取信息
$a[count($a)-1]=1;//嗯,1就是領取過了,然後
$i=count($a);
$num=0;//算總數的變量
while(i){//i為真則循環,0不算,所以到i=0就不會運行了
i--;//現在$a[i]==$a[count($a)-1]了
if($a[i]){//必須為真才能運行,而空白和0都不為真,所以建議0為未領取
$num+=pow(2,i);//php的算次冥應該是這個吧
}
}
echo $num;//存上,打完收工