ThinkPHP之唯一建衝突資料自增
阿新 • • 發佈:2019-02-19
功能:統計當日登陸玩家數
要求:一名使用者當日多次登陸只算一次
解析:
使用者表新增欄位loginTime int(10) not null
新增統計表:
CREATE TABLE `mnlm_nums` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cname` varchar(10) NOT NULL DEFAULT '' COMMENT '統計名稱year month day', `nums` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '統計數', `dates` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '統計日期', PRIMARY KEY (`id`), UNIQUE KEY `cname` (`cname`,`dates`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
使用者登陸 讀取loginTime獲得上次登陸時間戳
宣告變數$day = strtotime(date('Y-m-d')) 獲得當日零點時間戳
判斷loginTime是否小於$day
如果小於則表示今天新登陸使用者則欄位nums自增1
一、 mysql直接寫就是 insert....ON DUPLICATE KEY UPDATE `nums`=(nums+1)
二、由於用的是ThinkPhp框架,尋找手冊是否有類似方法,手冊沒有詳細描述,檢視原始碼,主要設計兩個檔案:
1. thinkphp/library/db/driver.class.php insert()方法
2. thinkphp/library/db/
得出結論
add($data,array(),array('nums'=>array('exp','nums+1')));
最後更新使用者的loginTime完成