이 글은 주로 Thinkphp가 데이터 일괄 업데이트를 위해 정리한 관련 정보를 소개합니다. 매우 훌륭하고 참고할 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있습니다.
다음 편집기에는 thinkphp 데이터 일괄 업데이트를 구현하는 세 가지 방법이 나와 있습니다. 방법이 잘 작성되지 않았다면 저에게 의견이 있으면 자유롭게 올려주세요.
방법 1:
//批量修改 data二维数组 field关键字段 参考ci 批量修改函数 传参方式 function batch_update($table_name='',$data=array(),$field=''){ if(!$table_name||!$data||!$field){ return false; }else{ $sql='UPDATE '.$table_name; } $con=array(); $con_sql=array(); $fields=array(); foreach ($data as $key => $value) { $x=0; foreach ($value as $k => $v) { if($k!=$field&&!$con[$x]&&$x==0){ $con[$x]=" set {$k} = (CASE {$field} "; }elseif($k!=$field&&!$con[$x]&&$x>0){ $con[$x]=" {$k} = (CASE {$field} "; } if($k!=$field){ $temp=$value[$field]; $con_sql[$x].= " WHEN '{$temp}' THEN '{$v}' "; $x++; } } $temp=$value[$field]; if(!in_array($temp,$fields)){ $fields[]=$temp; } } $num=count($con)-1; foreach ($con as $key => $value) { foreach ($con_sql as $k => $v) { if($k==$key&&$key<$num){ $sql.=$value.$v.' end),'; }elseif($k==$key&&$key==$num){ $sql.=$value.$v.' end)'; } } } $str=implode(',',$fields); $sql.=" where {$field} in({$str})"; $res=M($table_name)->execute($sql); return $res; } //测试 function test(){ $update_array=array(); for ($i=2; $i <7 ; $i++) { $data=array(); $data['id']=$i; $data['memeber_type']=2; $data['memeber_type_state']=1; $update_array[]=$data; } $res=$this->batch_update('yl_member',$update_array,id); var_dump($res); }
방법 2:
은 업데이트 기록을 하나씩 순환하는 것입니다. 레코드가 한 번 업데이트되면 성능이 저하되고 쉽게 차단될 수 있습니다.
그렇다면 하나의 SQL 문으로 일괄 업데이트를 구현할 수 있나요? MySQL은 일괄 업데이트를 구현하는 직접적인 방법을 제공하지 않지만 몇 가지 트릭을 사용하여 구현할 수 있습니다.
UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END WHERE id IN (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개의 데이터 행만 실행되도록 보장합니다.
여러 값을 업데이트하는 경우 약간만 수정하면 됩니다.
UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END, title = CASE id WHEN 1 THEN 'New Title 1' WHEN 2 THEN 'New Title 2' WHEN 3 THEN 'New Title 3' END WHERE id IN (1,2,3)
실제 적용
$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 = "UPDATE categories SET display_order = CASE id "; foreach ($display_order as $id => $ordinal) { $sql .= sprintf("WHEN %d THEN %d ", $id, $ordinal); } $sql .= "END WHERE id IN ($ids)"; echo $sql;
방법 2는 권장되지 않습니다.
방법 3:
/* * @param $saveWhere :想要更新主键ID数组 * @param $saveData :想要更新的ID数组所对应的数据 * @param $tableName : 想要更新的表明 * @param $saveWhere : 返回更新成功后的主键ID数组 * */ public function saveAll($saveWhere,&$saveData,$tableName){ if($saveWhere==null||$tableName==null) return false; //获取更新的主键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)>0&count($error)<$len){ //先将原先的预处理进行回滚 $model->rollback(); for($i=0;$i<count($error);$i++){ //删除更新失败的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); return $saveWhere; } else{ //如果都更新就回滚 $model->rollback(); return false; } }
테스트 방법 호출:
public function test(){ //要更新的数据表的主键数组 $where['ID']=array(70,73,74,80,83); //ID主键数组对应的待更新数据 $save=array( array('School'=>'DK Univisity01','isExport'=>0), array('School'=>'DK Univisity02','isExport'=>0), array('School'=>'DK Univisity03','isExport'=>0), array('School'=>'DK Univisity04','isExport'=>0), array('School'=>'','isExport'=>0), // array('School'=>' Univisity05','isExport'=>0), ); $f=$this->saveAll($where,$save,'want'); if(count($f['ID'])>0){ //返回更新成功的ID数组 echo "This is success :</br>"; dump($f); echo 'ok'; }else{ //更新失败操作 echo "This is failed :</br>"; dump($f); echo 'error'; } }
관련 권장 사항:
메시지 구현 방법 thinkPHP 프레임워크 기반 보드
위 내용은 일괄적으로 데이터를 업데이트하는 Thinkphp 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Dreamweaver Mac版
시각적 웹 개발 도구
