codeigniter count_all_results
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.
$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();
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');
Count first with no_reset_flag.
$this->db->count_all_results('', FALSE);
$rows = $this->db->get()->result_array();
system/database/DB_query_builder.php
public function count_all_results($table = '', $reset = TRUE) { ... }