Как решить эту проблему с кодом: у меня есть таблица базы данных (Mysql), и мне нужно переместить все содержимое этого поля в другую таблицу с помощью фреймворка Php Codeigniter?
Каков синтаксис для вставки данных из одной таблицы в другую таблицу, которая может использоваться в моей модели и контроллере?
Я пробовал играть с этими запросами ActiveX CodeIgniter, но до сих пор не повезло: это, но это не работает
function insert_into() { $this->db->insert('table1'); $this->db->set('to_column'); $this->db->select('from_column'); $this->db->from('table2'); }
Во-первых, получить содержимое первой таблицы tableFrom
и 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 } }
Простой был бы
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()); }