【问题标题】:CodeIgniter Active Record insert from one table to anotherCodeIgniter Active Record 从一个表插入到另一个表
【发布时间】:2013-01-11 01:58:35
【问题描述】:

使用 codeigniter 活动记录语法将数据从一个表插入另一个表的语法是什么?我尝试了通常的 mysqli 查询并且它有效,但我想使用 CodeIgniter Active Record 语法来保持一致性。

我尝试使用这些 CodeIgniter Active Record 查询,但仍然没有运气:

function insert_into()  
{    
    $this->db->insert('table1');
    $this->db->set('to_column');  
    $this->db->select('from_column');
    $this->db->from('table2');
}

【问题讨论】:

  • 你想要什么?从 1 个表中选择然后插入另一个表?是吗?
  • 是的,raheel,这就是我想要实现的目标。
  • 下面的答案是对的,你可以这样做

标签: php mysql codeigniter


【解决方案1】:

我认为最好的方法是使用 get 方法从一个表中获取您想要的数据,然后使用查询结果抓取器函数之一(如 result() ),使用insert() 方法。

将其放入代码中:

$query = $this->db->get('table1');
foreach ($query->result() as $row) {
      $this->db->insert('table2',$row);
}

当然,我认为 table1 与 table2 具有完全相同的结构(每列的列名和数据类型相同)。如果不是这种情况,您将不得不使用赋值将列从一个表映射到另一个表,但如果是这种情况,您的代码将会更宽。

【讨论】:

  • 这应该可以,但这不是最好的主意,最好让 OP 将查询卸载到 mysql 服务器并运行普通查询 "$this->db->query( "INSERT INTO t SELECT * FROM t2");"
【解决方案2】:

将 $source_table 复制到 $archive_table:

if(($this->db->table_exists($source_table) && ($this->db->table_exists($archive_table)){
    if ($this->db->query("CREATE TABLE $archive_table LIKE $source_table")){
        if($this->db->query("INSERT $archive_table SELECT * FROM $source_table")){
           echo 'copied ok';
        }
     } 
}

比遍历整个结果集并一次插入一行更简洁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2014-07-29
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多