【问题标题】:Effeciant way of inserting array of data in database using codeigniter使用codeigniter在数据库中插入数据数组的有效方法
【发布时间】:2014-09-02 00:26:33
【问题描述】:

我在数据库中有以下表格字段:

id, user_id, permission_id, value, created.

我有一个数组的结果,它一次可能包含 20 多个不同的值。整个包含permission_id 值,其余字段相似。像user_id 将是唯一一个将与每个permission_idvalue 插入相同的1created 与包含当前日期和时间相同。

现在我可以使用以下代码插入数据库:

 $user_perms=$this->input->post('permissions'); 

        foreach($user_perms as $perms) {

        $userPerms['permission_id']=$perms;
        $userPerms['user_id']=$uid;
        $userPerms['value']=1;
        $userPerms['created']=date("Y-m-d H:i:s");
        $this->admins->insertPerms($userPerms);
    }

现在它运行得很好。但我想让它更高效、更快速。您可能已经注意到,我在 foreach 循环中运行了 insert query。因此,当用户在后端单击提交时,查询可能一次运行超过 30 次。这不是一个好主意。

因此,我怎样才能一次插入没有循环的数据?

【问题讨论】:

    标签: php mysql arrays codeigniter


    【解决方案1】:

    您可以使用$this->db->insert_batch() 一次插入多行:

    $this->db->insert_batch(
        'table_name',
        array(
            // first row:
            array('permission_id' => 1, 'user_id' => 1, 'value' => 1, 'created' => '...'),
            // second row:
            array('permission_id' => 2, 'user_id' => 1, 'value' => 1, 'created' => '...')
        )
    );
    

    (阅读更多here

    但是,您显然不会以这种方式避免 foreach 循环,因为您需要以某种方式创建要传递给它的数据数组...
    因此,另一种优化它的方法是在事务中运行这些插入。这将(至少就 SQL 而言)相当于在单个查询中一次插入它们,因为 COMMIT 是最昂贵的操作,因此 1 次提交比 20 次提交快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多