ThinkPHP3.1笔记--批量操作
2015-10-24 15:09
771 查看
$mysql = M('tablename');
1.批量删除:
$where['id'] = array('in','1,3,4,...'); $msyql->where($where)->delete();
2.批量更新:
2.1第一种更新方法:将一批数据的某组字段更新成相同的数据:
$where['id'] = array('in','1,3,4,...'); $data['fieldname']='data';$msyql->where($where)->save($data);
2.2第二种方法:将一批数据的不同字段进行更新成不同的数据:=>使用事务进行处理
$where['id'] = array('1,3,4,...');
$data=array( array(data...),arrary(...),......);
//开启事务处理机制
$mysql->startTrans();
$flag = true;
for($i=0;$i<count($where);$i++){
$flag =$flag && $mysql->where(array_key($where)[0]."=".$where['id'][$i])->save($data[$i]);
}
if($flag){
$mysql->commit();
return true;
}else{
$mysql->callback();
return false;
}
2.3 save():如果更新的主键id不存在,返回false;如果更新的内容与原来的相同,返回false;其他情况则返回true;
2.4 PHP数组键值操作:
获取数组的键值:array_keys($arr) = > return $key_arr;
获取数组的值:array_values($arr) = > return $value_arr;
获取数组值为$value的$key值:array_keys($arr,$value) =>return $key;
将数组颠倒不保留键值:array_reserve($arr) = > return $arr;
将指定键值的数据删除:unset($arr[$key]) = >return boolean;//不会重构数组,返回后数组的键值不变,只是删除了指定的元
素而已
将数组里面的$value打乱:sheuffle($arr) => return $arr;
将数组下标进行查询索引排序:array_merge($arr) => return $arr;//数组下标从0、1、2...开始,重构了数组
函数把两个或多个数组合并为一个数组,如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则
键名会以连续方式重新索引;注释:如果仅仅向
array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。
2.5 自定义saveAll:更新函数:
3. 进行select查询时候,如果预知查询返回结果只有一条的话, 尽量用limit;
1.批量删除:
$where['id'] = array('in','1,3,4,...'); $msyql->where($where)->delete();
2.批量更新:
2.1第一种更新方法:将一批数据的某组字段更新成相同的数据:
$where['id'] = array('in','1,3,4,...'); $data['fieldname']='data';$msyql->where($where)->save($data);
2.2第二种方法:将一批数据的不同字段进行更新成不同的数据:=>使用事务进行处理
$where['id'] = array('1,3,4,...');
$data=array( array(data...),arrary(...),......);
//开启事务处理机制
$mysql->startTrans();
$flag = true;
for($i=0;$i<count($where);$i++){
$flag =$flag && $mysql->where(array_key($where)[0]."=".$where['id'][$i])->save($data[$i]);
}
if($flag){
$mysql->commit();
return true;
}else{
$mysql->callback();
return false;
}
2.3 save():如果更新的主键id不存在,返回false;如果更新的内容与原来的相同,返回false;其他情况则返回true;
2.4 PHP数组键值操作:
获取数组的键值:array_keys($arr) = > return $key_arr;
获取数组的值:array_values($arr) = > return $value_arr;
获取数组值为$value的$key值:array_keys($arr,$value) =>return $key;
将数组颠倒不保留键值:array_reserve($arr) = > return $arr;
将指定键值的数据删除:unset($arr[$key]) = >return boolean;//不会重构数组,返回后数组的键值不变,只是删除了指定的元
素而已
将数组里面的$value打乱:sheuffle($arr) => return $arr;
将数组下标进行查询索引排序:array_merge($arr) => return $arr;//数组下标从0、1、2...开始,重构了数组
函数把两个或多个数组合并为一个数组,如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则
键名会以连续方式重新索引;注释:如果仅仅向
array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。
2.5 自定义saveAll:更新函数:
/ * @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,'want'); return $saveWhere; } else{ //如果有一条失败就回滚 $model->rollback(); return false; } }
3. 进行select查询时候,如果预知查询返回结果只有一条的话, 尽量用limit;
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复