匿名使用者
1級2017-04-12 回答
具體的簽到規則是
管理員在後台配置,每次連續簽到的天數 然後贈送積分或者其他一些優惠,還要設定每人是否領取一次。
主表是簽到基本設定
規則是副表
然後使用者簽到是一張表。現在糾結在如何去判斷使用者是否領取過。
是否還要新增一張表?
簽到表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;//存上,打完收工
一周又是一周
三年又三年,之後又三年,這就九年了,老大!無間道的話還迴盪在耳邊,而我入職以來,這就已經是第四周了。時間飛逝歲月如梭,一天一天的日子,感覺起來也挺快的。除了第一周剛上任的時候,感覺時間慢慢流,現在進入工作狀態以後,時間還是一閃而過的。白天的時間最是難熬,特別是下午的時候。工作時間久,而下午的時候也是...
MySQL一周學習總結之DDL語言
ddl語言即資料定義語言,是建立資料庫 表等的語言。1 建立資料庫 語法 create database 資料庫名 2 檢視mysql下所有的資料庫名 語法 show databases 3 刪除資料庫 語法 drop database 資料庫名 4 使用指定的資料庫 語法 use 資料庫名 1 表...
mysql備份指令碼例子 一周輪動
bin sh d backup mkdir backup chmod 777 r backup group concat函式用於將多個字串連線成乙個字串,在拼接成字串時就會存在拼接長度的問題,mysql 預設的拼接最大長度為1024 個位元組,由於1024個位元組會出現不夠用的情況,所以有時需要去根...