ThinkPHP之唯一建冲突数据自增

来源:互联网 发布:机器人编程指令 编辑:程序博客网 时间:2024/05/16 14:38

功能:统计当日登陆玩家数

要求:一名用户当日多次登陆只算一次

解析:

用户表新增字段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完成

0 0
原创粉丝点击