Thinkphp批量更新数据的方法汇总Word格式文档下载.docx

上传人:b****4 文档编号:14382959 上传时间:2022-10-22 格式:DOCX 页数:5 大小:16.35KB
下载 相关 举报
Thinkphp批量更新数据的方法汇总Word格式文档下载.docx_第1页
第1页 / 共5页
Thinkphp批量更新数据的方法汇总Word格式文档下载.docx_第2页
第2页 / 共5页
Thinkphp批量更新数据的方法汇总Word格式文档下载.docx_第3页
第3页 / 共5页
Thinkphp批量更新数据的方法汇总Word格式文档下载.docx_第4页
第4页 / 共5页
Thinkphp批量更新数据的方法汇总Word格式文档下载.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Thinkphp批量更新数据的方法汇总Word格式文档下载.docx

《Thinkphp批量更新数据的方法汇总Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Thinkphp批量更新数据的方法汇总Word格式文档下载.docx(5页珍藏版)》请在冰豆网上搜索。

Thinkphp批量更新数据的方法汇总Word格式文档下载.docx

$con_sql=array();

$fields=array();

foreach($dataas$key=$value){

$x=0;

foreach($valueas$k=$v){

if($k!

=$field!

$con[$x]$x==0){

$con[$x]="

set{$k}=(CASE{$field}"

;

}elseif($k!

$con[$x]$x0){

{$k}=(CASE{$field}"

=$field){

$temp=$value[$field];

$con_sql[$x].="

WHEN'

{$temp}'

THEN'

{$v}'

"

$x++;

in_array($temp,$fields)){

$fields[]=$temp;

$num=count($con)-1;

foreach($conas$key=$value){

foreach($con_sqlas$k=$v){

if($k==$key$key$num){

$sql.=$value.$v.'

end),'

}elseif($k==$key$key==$num){

end)'

$str=implode('

'

$fields);

$sql.="

where{$field}in({$str})"

$res=M($table_name)-execute($sql);

return$res;

//测试

functiontest(){

$update_array=array();

for($i=2;

$i7;

$i++){

$data=array();

$data['

id'

]=$i;

memeber_type'

]=2;

memeber_type_state'

]=1;

$update_array[]=$data;

$res=$this-batch_update('

yl_member'

$update_array,id);

var_dump($res);

方法二:

即是循环一条一条的更新记录。

一条记录update一次,这样性能很差,也很简单造成堵塞。

那么能不能一条sql语句实现批量更新呢?

mysql并没有供应挺直的方法来实现批量更新,但是可以用点小技巧来实现。

UPDATEcategories

SETdisplay_order=CASEid

WHEN1THEN3

WHEN2THEN4

WHEN3THEN5

END

WHEREidIN(1,2,3)

这句sql的意思是,更新display_order字段,假如id=1则display_order的值为3,假如id=2则display_order的值为4,假如id=3则display_order的值为5。

即是将条件语句写在了一起。

这里的where部分不影响代码的执行,但是会提高sql执行的效率。

确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。

假如更新多个值的话,只需要稍加修改:

END,

title=CASEid

WHEN1THEN'

NewTitle1'

WHEN2THEN'

NewTitle2'

WHEN3THEN'

NewTitle3'

实际运用

$display_order=array(

1=4,

2=1,

3=2,

4=3,

5=9,

6=5,

7=8,

8=9

);

$ids=implode('

array_keys($display_order));

$sql="

UPDATEcategoriesSETdisplay_order=CASEid"

foreach($display_orderas$id=$ordinal){

$sql.=sprintf("

WHEN%dTHEN%d"

$id,$ordinal);

$sql.="

ENDWHEREidIN($ids)"

echo$sql;

方法二不建议用法。

方法三:

/*

*@param$saveWhere:

想要更新主键ID数组

*@param$saveData:

想要更新的ID数组所对应的数据

*@param$tableName:

想要更新的表明

*@param$saveWhere:

返回更新胜利后的主键ID数组

**/

publicfunctionsaveAll($saveWhere,$saveData,$tableName){

if($saveWhere==null||$tableName==null)

//猎取更新的主键id名称

$key=array_keys($saveWhere)[0];

//猎取更新列表的长度

$len=count($saveWhere[$key]);

$flag=true;

$model=isset($model)?

$model:

M($tableName);

//开启事务处理机制

$model-startTrans();

//记录更新失败ID

$error=[];

for($i=0;

$i$len;

$i++){

//预处理sql语句

$isRight=$model-where($key.'

='

.$saveWhere[$key][$i])-save($saveData[$i]);

if($isRight==0){

//将更新失败的记录下来

$error[]=$i;

$flag=false;

//$flag=$flag$isRight;

if($flag){

//假如都成立就提交

$model-commit();

return$saveWhere;

}elseif(count($error)0count($error)$len){

//先将原先的预处理进行回滚

$model-rollback();

$icount($error);

//删除更新失败的ID和Data

unset($saveWhere[$key][$error[$i]]);

unset($saveData[$error[$i]]);

//重新将数组下标进行排序

$saveWhere[$key]=array_merge($saveWhere[$key]);

$saveData=array_merge($saveData);

//进行其次次递归更新

$this-saveAll($saveWhere,$saveData,$tableName);

else{

//假如都更新就回滚

在测试方法中调用:

publicfunctiontest(){

//要更新的数据表的主键数组

$where['

ID'

]=array(70,73,74,80,83);

//ID主键数组对应的待更新数据

$save=array(

array('

School'

DKUnivisity01'

isExport'

=0),

DKUnivisity02'

DKUnivisity03'

DKUnivisity04'

//array('

Univisity05'

$f=$this-saveAll($where,$save,'

want'

);

if(count($f['

])0){

//返回更新胜利的ID数组

echo"

Thisissuccess:

/br"

dump($f);

echo'

ok'

//更新失败操作

Thisisfailed:

error'

以上所述是我给大家介绍的Thinkphp批量更新数据的方法汇总,盼望对大家有所关心

...

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1