-2

この codeigniter の問題を解決する方法: データベース テーブル (Mysql) があり、そのフィールドのすべての内容を Php Codeigniter フレームワークを使用して別のテーブルに移動する必要がありますか?

モデルとコントローラーで使用できる、あるテーブルから別のテーブルにデータを挿入するための構文は何ですか?

これらの CodeIgniter Active Record クエリで遊んでみましたが、まだ運がありません:これは動作しません

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

2 に答える 2

1

簡単なものは

INSERT INTO table1 (col1, col2, col3)
SELECT col1, col2, col3
FROM   table2

CI使用時query()

$this->db->query("INSERT INTO table1 (col1, col2, col3)
    SELECT col1, col2, col3
    FROM   table2");

これが別の方法です

$data = $this->db->select('col1, col2, col3')->get('table2');
if($data->num_rows())
{
    $insert = $this->db->insert('table1', $data->result_array());
}
于 2013-11-10T20:07:11.100 に答える
1

最初に、最初のテーブルのコンテンツを取得tableFromし、結果を反復処理して に挿入しますtableTo。このコードをモデルで使用できます。$this->load->database();コントローラーまたは関数で忘れないでください。

function insert_into() {
    $q = $this->db->get('tableFrom')->result(); // get first table
    foreach($q as $r) { // loop over results
        $this->db->insert('tableTo', $r); // insert each row to another table
    }
}

@編集

コントローラーで次のコードを試してください。

<?php
class fdm extends CI_Controller {
    function __construct() {
        parent::__construct();
        $this->load->library(array('table','form_validation'));
        $this->load->helper('url'); // load model
        $this->load->model('cbc','',TRUE);
    }

    function index() {
        $this->load->database();
        $this->load->model('cbc','',TRUE);

        $this->cbc->insert_into();
    } 
}

キー 1 の重複エントリのエラーを修正するには、テーブル 2 からコンテンツをインポートする前に、最初のテーブルを切り捨てることをお勧めします。これは次の方法で実行できます。

function insert_into() {
    $this->db->truncate('tableTo');
    $q = $this->db->get('tableFrom')->result(); // get first table
    foreach($q as $r) { // loop over results
        $this->db->insert('tableTo', $r); // insert each row to another table
    }
}

または、新しい行を挿入する代わりに行を更新することもできます:

function insert_into() {
        $q = $this->db->get('tableFrom')->result(); // get first table
        foreach($q as $r) { // loop over results
            $this->db->update('tableTo', $r, array('id' => $r->id)); // insert each row to another table
        }
    }
于 2013-11-10T20:09:20.943 に答える