当前位置:首页 > 日记 > 正文

完美解决Thinkphp3.2中插入相同数据的问题

完美解决Thinkphp3.2中插入相同数据的问题

问题描述

今天在使用TP3.2插入数据的时候,为了避免插入相同的数据(所谓相同的数据,其主键相同或者是唯一索引的字段相同),我创建的索引如下图,主键索引为自增字段,不可能出现重复,即唯一索引可能会出现重复,我希望的是uid,year,mounth,day 这三个字段出现相同的话,就更新当前记录。

问题解决办法

在之前面对这样的问题的时候,我们知道,MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO来解决。

使用ON DUPLICATE KEY UPDATE

插入数据之前,表中就一条记录,如下图

SQL语句如下,当插入记录时候,与表中已有记录相同,则更新改条记录,否则插入记录。

INSERT INTO `work_log` (`uid`,`year`,`mounth`,`day`,`status`) VALUES(1, 2016, 6, 3, 1) ON DUPLICATE KEY UPDATE `status` = VALUES(`status`),`updated_ts` = NOW();

使用REPLACE INTO

代码如下:

先执行如下代码插入一条数据

REPLACE INTO `work_log` (`uid`,`year`,`mounth`,`day`,`status`) VALUES(1, 2016, 6, 2, 1)

效果如下图

再次执行如下代码,就会更新上面插入的代码

REPLACE INTO `work_log` (`uid`,`year`,`mounth`,`day`,`status`) VALUES(1, 2016, 6, 2, 5)

效果如下图

ON DUPLICATE KEY UPDATE与REPLACE INTO区别

当出现相同的值时候,ON DUPLICATE KEY UPDATE是更新已经存在的记录,REPLACE INTO是删除之前的记录,然后插入新的记录。

Thinkphp3.2中解决办法

在Thinkphp3.2中,通过add()函数的第三个参数来处理插入相同数据的问题。

Model.class.PHP中add()方法,调用了Db.class.php中insert中方法,在insert方法中,我们可以看到有如下代码:

其中$replace 正好是add方法中第三个参数。

以上这篇完美解决Thinkphp3.2中插入相同数据的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

相关文章

红帽Linux忘记root密码的解决方法

红帽Linux忘记root密码的解决方法

解决方法,密码,红帽,电脑软件,root,在出现以下画面后按下键盘e键 (图1) 按下后会出现如下画面,在次按下e键,将会出现如图3所示的画面(图2)如图3所示,使用上下键将焦点移动到第2项,如果出现的和本图不一样,就找到有kerner字样的那一行,然后再次按下E键…

PS怎么设计珍珠字效果的字体?

PS怎么设计珍珠字效果的字体?

字体,效果,电脑软件,PS,用PS制作珍珠字的效果,做好之后图片看上去就像是用珍珠摆成的字一样。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、建立一个100*100的图象文件,用椭圆形选框工具画一个固定大…

angular中实现li或者某个元素点击

angular中实现li或者某个元素点击

方法,元素,两种,电脑软件,angular,本文介绍了angular中实现li或者某个元素点击变色的两种方法,分享给大家,希望对大家有帮助先说一种最直接了当的不需要js控制。方法一:直接在用ng-class就可以控制:<p ng-click="state=1;" ng-class="{activ…

ps怎么设计一个圆形的旅游图标?

ps怎么设计一个圆形的旅游图标?

图标,电脑软件,ps,ps中想要设计一个圆形的旅游图标,该怎么设计呢?下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、我们设计整个旅游图标为一个圆形的结构,先从天空开始设计…

javascript中神奇的 Date对象小结

javascript中神奇的 Date对象小结

对象,神奇,电脑软件,javascript,Date,Date 对象算是较常用的对象之一,但很多人完全不会操作,就算一些简单的操作也用 moment 而不自己尝试一下。本次分享下 Date 中的 date 使用技巧,希望能给大家启发。MDN官网介绍setDate() 方法根据本地时间…

PHP基于递归实现的约瑟夫环算法示

PHP基于递归实现的约瑟夫环算法示

算法示例,递归实现,约瑟夫,电脑软件,PHP,本文实例讲述了PHP基于递归实现的约瑟夫环算法。分享给大家供大家参考,具体如下:约瑟夫环问题: 39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓。于是决定了自杀方式…

excel输入带圈数字的方法excel怎么

excel输入带圈数字的方法excel怎么

输入带,数字,方法,电脑软件,excel,  在Excel中录入数据的时候经常需要输入一些带圈的数字,这些数字不是单纯的靠输入法就可以输入的,是要利用Excel中的功能。接下来请欣赏小编给大家网络收集整理的excel输入带圈数字的方法。excel输入带圈…

ubuntu 9.10创建samba错误的解决方

ubuntu 9.10创建samba错误的解决方

解决方法,错误,电脑软件,ubuntu,samba,新建一个文件夹,右键选择属性,并选择share,选择share this folder,点击create按钮,得到如下错误:Failed to execute child process "testparm" (No such file or directory)解决方法如下:sudo cp /usr/bin/…

word2003如何设置页码左右

word2003如何设置页码左右

设置,方法,文档,页码,如何设置,  Word文档中插入页码是办公的基本操作,利用微软Office所提供的强大页码功能,我们可以实现丰富多样的页码格式。下面小编将为大家讲解一下word文档页码左右设置技巧,欢迎大家来到学习。word2003文档设置左右页…

如何加速ppt打开速度

如何加速ppt打开速度

速度,电脑软件,ppt,  平常要用到PowerPoint2010时一方面在赞叹它的功能强大时,另一方面是不是也在痛骂它蜗牛般的启动速度呢?事实强于雄辩,只要简单的几个设置就可以让你的PPT设计神器飞起来。下面小编教大家如何解决!加速ppt打开速度第一…

FTP服务器端软件Serv-U教程 | 4

FTP服务器端软件Serv-U教程 | 4

教程,服务器端,电脑软件,FTP,Serv,第四节 Serv-U用户属性之&ldquo;General&rdquo;(常用)一、&ldquo;General&rdquo;(常用)选项。如下图:二、各项说明和应用实例1、Lock user in home directory(将用户锁定在主目录):如果选中则只允许用户访问&ldquo…

ES6中数组array新增方法实例总结

ES6中数组array新增方法实例总结

方法,数组,实例,电脑软件,array,本文实例讲述了ES6中数组array新增方法。分享给大家供大家参考,具体如下:●find :let arr=[1,2,234,'sdf',-2];arr.find(function(x){ return x<=2;})//结果:1,返回第一个符合条件的x值arr.find(function(x,i…