2010-07-29 5 views
4

CodeIgniter Active Record 클래스를 사용하여 SQL 쿼리를 구현하려고합니다. 쿼리는 다음과 같습니다.codeigniter 활성 레코드에서 select를 사용하여 레코드를 삽입하는 방법

INSERT california_authors (au_id, au_lname, au_fname) 
SELECT au_id, au_lname, au_fname 
FROM authors 
WHERE State = 'CA' 

$ this-> db-> query 메서드를 사용하지 않고 CodeIgniter에서 가능합니까?

솔루션 :

$resultarr = $query->result_array(); // Return an associative array 

이에 대한 많은 정보가 매뉴얼에 있습니다 : 당신이 할 수있는 결과를 검색하려면

$this->db->select('au_id, au_lname, au_fname'); 
$this->db->from('california_authors'); 
$this->db->where('state', 'CA'); 
$query = $this->db->get(); 

if($query->num_rows()) { 
    $new_author = $query->result_array(); 

    foreach ($new_author as $row => $author) { 
     $this->db->insert("authors", $author); 
    }   
} 

감사

답변

9

나는 당신이 무슨 말을 생각 AA SELECT ... INSERT 쿼리, 활성 레코드 클래스에 해당 할 수있는 방법이 아니지만, 그것을

일을 할 수있는 두 가지 방법이 있습니다 당신이

말 그리고 2) 칼레는 말을 사용하여이 작업을 수행 할 수있는 것처럼)

$query = $this->db->query('INSERT california_authors (au_id, au_lname, au_fname) 
          SELECT au_id, au_lname, au_fname 
          FROM authors 
          WHERE State = \'CA\''); 

,

$select = $this->db->select('au_id, au_lname, au_fname')->where('state', 'CA')>get('california_authors'); 
if($select->num_rows()) 
{ 
    $insert = $this->db->insert('california_authors', $select->result_array()); 
} 
else 
{ /* there is nothing to insert */ 
+0

나는 if ($ select-> num_rows()) 안에 foreach가 있어야한다고 생각한다. – vikmalhotra

-2
$query = $this->db->insert('california_authors', array('au_id' => 'value', 'au_lname' => 'value', 'au_name' => 'value')); 

$query2 = $this->db->select('au_id, au_lname, au_fname')->where('state', 'CA')->get('california_authors'); 

.

http://codeigniter.com/user_guide/database/active_record.html

+0

왜 동의하셨습니까? 분명히 잘못되었습니다. Calle은 INSERT ... SELECT 쿼리가 아닌 완전히 다른 두 개의 명령문을 수행하는 방법을 보여줍니다. –

+0

나는이 질문에 대한 오해 때문에 동의하지 않았 음에 동의한다. Edgar Nadal의 길은 갈 길입니다. 시끄러워. –

+0

@Phil - 코드를 시험해보고 Calle이 제공 한 솔루션이 작동하지 않는다는 것을 깨달았습니다. – vikmalhotra