В сценарии мне нужно знать количество записей, которое запрос вернет, что в кодеигнитре можно сделать с помощью $query->num_rows()
или $this->db->count_all_results()
. Какой из них лучше и в чем разница между этими двумя?
Разница между $query> num_rows() и $this-> db-> count_all_results() в CodeIgniter и которая рекомендуется
Ответ 1
С num_rows()
вы сначала выполняете запрос, а затем можете проверить, сколько у вас строк. count_all_results()
, с другой стороны, дает только количество строк, которые будет вызывать ваш запрос, но не дает вам фактического набора результатов.
// num rows example
$this->db->select('*');
$this->db->where('whatever');
$query = $this->db->get('table');
$num = $query->num_rows();
// here you can do something with $query
// count all example
$this->db->where('whatever');
$num = $this->db->count_all_results('table');
// here you only have $num, no $query
Ответ 2
$this->db->count_all_results
является частью запроса Active Record (подготовка запроса, только возврат номера, а не фактические результаты).
$query->num_rows()
выполняется на объекте результатов (после возвращения результатов из БД).
Ответ 3
Which one is better and what is the difference between these two
Для меня это почти неудобно, кто-то просто хочет получить количество записей без повторного касания или выполнить другой запрос, в котором задействован тот же ресурс. Кроме того, память, используемая этими двумя функциями, в конце концов одинакова, поскольку с count_all_result
вы все еще выполняете get
(в терминах CI AR), поэтому я рекомендую вам использовать другую (или вместо этого использовать count()), который дал вам преимущества повторного использования.
Ответ 4
Существует два способа подсчета количества записей, возвращаемых запросом. Сначала это
$query = $this->db->query('select blah blah');
return $query->num_rows();
Это приведет к возврату числа строк запроса.
Второе
return $this->db->count_all_results('select blah blah');
Просто count_all_results потребует снова выполнить запрос.
Ответ 5
Мы также можем использовать
return count_all('table_name');
или
$this->db->from('table_name');
return $this->db->count_all_result();
или
$query = $this->db->query('select * from tab');
return $query->num_rows();
Ответ 6
Общее количество результатов
$this->db->count_all_results('table name');