1. 程式人生 > >ThinkPHP之唯一建衝突資料自增

ThinkPHP之唯一建衝突資料自增

功能:統計當日登陸玩家數

要求:一名使用者當日多次登陸只算一次

解析:

使用者表新增欄位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/

driver/mysql.class.php parseDuplicate()方法

得出結論

  add($data,array(),array('nums'=>array('exp','nums+1')));

最後更新使用者的loginTime完成