當前位置:編程學習大全網 - 源碼下載 - mysql簽到表怎麽設計找

mysql簽到表怎麽設計找

具體的簽到規則是

管理員在後臺配置,每次連續簽到的天數 然後贈送積分或者其他壹些優惠,還要設置每人是否領取壹次。

主表是簽到基本設置

規則是副表

然後用戶簽到是壹張表。現在糾結在如何去判斷用戶是否領取過。

是否還要添加壹張表?

評論 (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;//存上,打完收工

  • 上一篇:微信接龍隱藏功能get:如何完成接力填表
  • 下一篇:鴻蒙系統2和鴻蒙系統3的區別
  • copyright 2024編程學習大全網