5

I want to implement a sql query using CodeIgniter Active Record class. The query looks like this..

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

Is this possible in CodeIgniter without using the $this->db->query method?

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

Regards

3 Answers 3

12

I think you are talking about a a SELECT ... INSERT query, on the active record class there is not a method to do that, but there are two ways to do it

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

As you say

And 2) you can can do this, using what Calle said,

$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 */
Sign up to request clarification or add additional context in comments.

1 Comment

I think there needs to be a foreach as well inside the if($select->num_rows())
2

if you want to have good control on query execution then you could do your SELECT ... INSERT in 3 ways:

1)use codeigniter active record insert_batch(ci3) or insertBatch(ci4)(recomended):

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

2)use codeigniter active record simple insert:

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

3)use codeigniter active record query execution:

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

Comments

0

it's an old post but this may be usefull to someone.

It's the same as Edgar Nadal answer, with safer way to pass parameter to query

$state = 'CA';
$sql = "
INSERT california_authors (au_id, au_lname, au_fname)
SELECT au_id, au_lname, au_fname
FROM authors
WHERE State = ?
";
$this->db->query($sql, array($state));

codeigniter-3.2.1

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.