codeigniter count_all_results codeigniter count_all_results codeigniter codeigniter

codeigniter count_all_results


$this->db->count_all_results() replaces $this->db->get() in a database call.

I.E. you can call either count_all_results() or get(), but not both.

You need to do two seperate active record calls. One to assign the results #, and one to get the actual results.

Something like this for the count:

$this->db->select('id');$this->db->from('table');$this->db->where($your_conditions);$num_results = $this->db->count_all_results();

And for the actual query (which you should already have):

$this->db->select($your_columns);$this->db->from('table');$this->db->where($your_conditions);$this->db->limit($limit);$query = $this->db->get();


Have you read up on https://www.codeigniter.com/userguide2/database/active_record.html#caching ?

I see you are trying to do some pagination where you need the "real" total results and at the same time limiting.

This is my practice in most of my codes I do in CI.

    $this->db->start_cache();    // All your conditions without limit    $this->db->from();    $this->db->where(); // and etc...    $this->db->stop_cache();    $total_rows = $this->db->count_all_results(); // This will get the real total rows    // Limit the rows now so to return per page result    $this->db->limit($per_page, $offset);    $result = $this->db->get();    return array(        'total_rows' => $total_rows,        'result'     => $result,    ); // Return this back to the controller.

I typed the codes above without testing but it should work something like this. I do this in all of my projects.


You dont actually have to have the from either, you can include the table name in the count_all_results like so.

$this->db->count_all_results('table_name');