基于select的多个插入查询?

时间:2014-09-27 22:13:16

标签: php mysql codeigniter

以下是我的疑问:

$result4 = $this->db->query('SELECT team_leader_id FROM teams WHERE team_money < 0')->result_array();
$this->db->insert( 'd_teams', array( 'leader_id' => $result4[0]['team_leader_id'] ) );

是的,它可以工作,但它仅适用于1行,例如可以有多个甚至50个。我如何编辑它以便它将支持select查询返回的所有可用行?因此,它会将它们全部插入到d_teams表的不同行中。 非常感谢!

3 个答案:

答案 0 :(得分:2)

我相信您尝试做的事情可以使用子查询:

INSERT INTO d_teams (leader_id) (SELECT team_leader_id FROM teams WHERE team_money < 0);

所以,在你的代码中:

$this->db->query('INSERT INTO d_teams (leader_id) (SELECT team_leader_id FROM teams WHERE team_money < 0)');

答案 1 :(得分:0)

您可以尝试在遍历insert的循环中使用$result4函数:

$result4 = $this->db->query('SELECT team_leader_id FROM teams WHERE team_money < 0')->result_array();

foreach($result4 as $result) {
    $this->db->insert( 'd_teams', array( 'leader_id' => $result['team_leader_id'] ) );
}

也许还有另一种插入多行的方法。但这应该有用。

答案 2 :(得分:0)

此SO答案解释了如何使用CodeIgniter执行批量插入:https://stackoverflow.com/a/17875754/365296

在你的情况下,我猜应用它看起来像这样:

$result4 = $this->db->query('SELECT ... ')->result_array();
$teams = array_map(function ($dbRow) {
    return array('leader_id' => $dbRow['team_leader_id']);
}, $result4);
$this->db->insert_batch('d_teams', $teams);