Yii2.0中不同业务之间的表导入工作(批量查询, 批量插入)
来源:互联网 发布:淘宝认证考试 编辑:程序博客网 时间:2024/05/01 04:27
感想:
我已经做过好几次数据表之间的导入啊,同步啊什么的,数据不是太多,但也不能全部取出,这样速度会很慢的,所以就采用了,批量查询,然后再批量插入操作,现在,我总结下,以备以后进行使用。
1: //查询数据对象
$query = $this->swapObj($day, $startTime);
/** * 处理牛转用户信息 * * @param string $startTime 开始时间 默认false * @return object|null */public function swapObj($day, $startTime){ $query = WxUser::find() ->select('user_mobile, user_fullname, user_email, user_wechat, user_company, created_at, updated_at, user_position, user_country, user_province, user_city, user_area') ->where(['>', 'user_swap_register_step', 1]); //如果day存在,并且为“yesterday”, 说明要统计当前时间的前一天 if ($day && ($day == 'yesterday')) { $timeData = $this->handleTime(); if (isset($timeData['sTime'], $timeData['eTime']) && $timeData['sTime'] && $timeData['eTime']) { $query->andFilterWhere(['between', 'created_at', $timeData['sTime'], $timeData['eTime']]); } } //取出相应条件的数据,并返回 if ($startTime) { $query->andWhere(['>', 'created_at', $startTime]); } $query->groupBy("user_mobile")->asArray(); return $query ? $query : null;}
2: 首先批量查询 100条数据
foreach ($query->batch(100, Yii::$app->crmDb) as $rows) { if (!$rows || !is_array($rows)) { echo $this->stdout("无数据信息!\n", Console::BOLD);die; } //遍历每一组数据,进行拆分各个字段,进行组合 foreach ($rows as $key => $value) { //处理需要导出的数据 $mobile = $value['user_mobile']; $wechat = isset($value['user_wechat']) && $value['user_wechat'] ? $value['user_wechat'] : ''; $fullname = isset($value['user_fullname']) && $value['user_fullname'] ? $value['user_fullname'] : ''; ......... $data[] = [$mobile, $wechat, $fullname, $email, $company, $position, $region, $from, $createdAt, $updatedAt, $industry]; //批量插入操作 $keys = ['mobile', 'weixin', 'username', 'email', 'company', 'position', 'area', 'come_from', 'created_at', 'updated_at', 'trade']; $mUserSummary = new UserSummary(); $result = $mUserSummary->batchinsertInfo($keys, $data); unset($data); }}
说明:
1): 100: 表示批量取出100条数据
2): Yii::$app->crmDb 数据库地址配置(例如下面是本地配置)
'wxDb' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=wx_chuangyejia.com', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'tablePrefix' => 'wx_',],3): 得到的rows是你要查询的前100条数据的数组集合
array(100) { [0]=> array(12) { ["user_mobile"]=> string(11) "xxxx" ["user_fullname"]=> string(16) "微信5000好友" ..... } [1]=> array(12) { ["user_mobile"]=> string(11) "xxxxx" ["user_fullname"]=> string(6) "李俊" ["user_email"]=> ...... } ....}4) : $rows遍历后得到的$value, 我们就可以对每组数据中的变量进行处理了
5): 要说的是批量插入
/** * 批量插入 * * @param string $keys 要插入的字段属性集合 * @param array $data 要插入的字段值数组数据 * @return int|bool */public function batchinsertInfo($keys, $data){ $result = 0; if ($keys && $data && is_array($data)) { $result = self::find() ->createCommand() ->batchInsert(self::tableName(),$keys,$data) ->execute(); } return $result ? $result : 0;}
示例如下:
// INSERT 一次插入多行 $connection->createCommand() ->batchInsert('user', ['name', 'age'], //插入数据的字段名称 [['Tom', 30],['Jane', 20],['Linda', 25].... ]) //要插入多行的数据 ->execute();
1: 如何获取对应的$query对象
2: 批量查询数据
3: 对于批量查询的数据,再进行每条数据分别处理
4: 批量插入操作
5: 其他的就是业务逻辑了
虽然这些看似简单,但也算是知识点吧,对于一个健忘的我,还是有帮助的,加油吧!
0 0
- Yii2.0中不同业务之间的表导入工作(批量查询, 批量插入)
- Yii2.0 批量插入数据
- Yii2批量插入数据
- yii2批量插入数据
- mysql针对查询结果,批量插入不同的uuid
- Yii2之批量插入数据
- Yii2 开启事务 批量插入
- Mybatis-批量查询&&批量插入
- yii2.0 批量删除
- oracle批量查询插入
- 【ITOO 1】SQLBulkCopy实现不同数据库服务器之间的批量导入
- mybatis的批量插入与动态查询
- yii2框架中批量修改
- yii2框架中批量上传
- SQL批量插入数据:将同一个表中某列符合条件的数据批量插入此表中
- JDBC的批量批量插入
- JDBC的批量批量插入
- Yii2 购物车 批量插入,更新数据
- 基于机器学习的自动问答系统构建
- error: tool 'xcodebuild' requires Xcode的解决办法
- php获取客户端请求的http头
- 一位资深程序员大牛给予Java初学者的学习路线建议
- 子线程中添加Toast的方法
- Yii2.0中不同业务之间的表导入工作(批量查询, 批量插入)
- 在Mac OS X 中如何查看keychain中已经保存的密码记录
- theano学习初步(二) 基础Tensor函数
- NOIP2008(2)排座椅
- 广播机制
- 测试URL接口的Thread
- 【caffe-Windows】训练自己数据——数据集格式转换
- Python调用已训练好的caffe模型进行分类
- Android设备连接Unity Profiler性能分析器