一次运行多个mysql命令而不是在codeigniter中顺序运行?

Posted

技术标签:

【中文标题】一次运行多个mysql命令而不是在codeigniter中顺序运行?【英文标题】:Running multiple mysql commands at once instead of sequentially in code igniter? 【发布时间】:2016-05-22 16:03:42 【问题描述】:

所以我正在处理现有的代码库,该函数从 csv 中获取每一行,格式化数据,然后将其插入到数据库中。对于 CSV 中的行,整个过程大约需要 20 分钟。但是,如果我保持所有内容相同并删除实际执行数据库条目的行

$this->db->replace('my_table', $myObject);

整个代码运行大约需要 2 秒。所以我想知道是否可以存储所有对象,然后一次将它们全部分配给数据库?我正在考虑进行 1 次 sql 调用而不是数千次。想法?

【问题讨论】:

【参考方案1】:

你看过insert_batch() 吗?请在此处查看Documentation。

你可以解析你的 csv 并像这样构建一个数组

$insert_array = array();
foreach($myCSV as $item)

     $insert_array[] = array('db_field1' => $item->value1, 
                             'db_field2' => $item->value2);


$this->db->insert_batch('mytable', $insert_array);

这将运行一个查询,看起来像这样:

INSERT INTO mytable (db_field1, db_field2) VALUES ('item1value1', 'item1value2'),  ('item2value1', 'item2value2'); 

【讨论】:

以上是关于一次运行多个mysql命令而不是在codeigniter中顺序运行?的主要内容,如果未能解决你的问题,请参考以下文章

多个回调而不是在swift中使用Delegates

MongoTemplate 一次更新多个文档而不使用 saveAll() 或循环

MTLSharedEventListener 块在命令缓冲区调度之前调用而不是在运行中

如何让 flyway CLI 列出所有验证失败,而不是在第一次失败时停止

完成后输出一次答案,而不是在每一行

如何在flutter中使用一个配置文件运行多个测试文件而不发出长终端命令?