2010-07-29 1 views
4

Je souhaite implémenter une requête sql en utilisant la classe CodeIgniter Active Record. La requête ressemble à ceci ..Comment insérer des enregistrements en utilisant select dans l'enregistrement actif de codeigniter

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

Est-ce possible dans CodeIgniter sans utiliser le $ this-> db-> méthode de requête?

Solution:

$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); 
    }   
} 

Cordialement

Répondre

9

Je pense que vous parlez aa SELECT ... INSERT requête, dans la classe d'enregistrement actif il n'y a pas une méthode pour le faire, mais il y a deux façons de le faire

1)

$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\''); 

Comme vous le dites

Et 2), vous pouvez pouvez le faire, en utilisant ce que dit Calle,

$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

Je pense qu'il doit y avoir un foreach aussi bien dans le 'if ($ select-> num_rows())' – 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'); 

Pour récupérer le résultat que vous pouvez faire ceci:

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

Il y a beaucoup d'informations à ce sujet dans le manuel .

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

+0

Pourquoi avez-vous accepté cela? C'est clairement faux. Calle vous montre comment faire deux instructions différentes, pas une requête INSERT ... SELECT. –

+0

Je suis d'accord, cela n'aurait pas dû être accepté parce que j'ai mal compris la question. Le chemin d'Edgar Nadal est la voie à suivre. srry. –

+0

@Phil - J'ai essayé le code et j'ai réalisé que la solution donnée par Calle ne fonctionnait pas. – vikmalhotra

Questions connexes