2011-08-12 11 views
29

W scenariuszu potrzebuję znać liczbę zestawów rekordów, które zwróci zapytanie w kodzie źródłowym wykonane przez $query->num_rows() lub $this->db->count_all_results(). Który z nich jest lepszy i jaka jest różnica między tymi dwoma?

Odpowiedz

38

Po wprowadzeniu num_rows() najpierw wykonujesz zapytanie, a następnie możesz sprawdzić, ile masz wierszy. count_all_results() z drugiej strony podaje tylko liczbę wierszy, które wygeneruje twoje zapytanie, ale nie daje rzeczywistego zestawu wyników.

// 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 
+1

prawo, chyba będę używać 'count_all_results', muszę liczyć w paginacji, dzięki tony :) – Kumar

+0

' count_all_results' jest o wiele lepiej, jeśli patrząc z punktu widzenia optymalizacji. –

5

$this->db->count_all_results jest częścią Active Record zapytania (przygotowuje zapytanie, tylko zwrócić liczbę, a nie rzeczywiste wyniki).

$query->num_rows() jest wykonywany na resultset object (po zwrocie wyników z DB).

+0

więc wydaje mi się, że lepiej użyć 'if ($ this-> db-> count_all_results()> 0 {// rzeczy}}? – Kumar

+0

Jeśli wszystko, co Cię interesuje, to liczba znalezionych wyników, to tak –

2

Which one is better and what is the difference between these two To prawie nie do przyjęcia, ktoś po prostu chce uzyskać liczbę rekordów bez ponownego dotykania lub wykonać inne zapytanie, które dotyczyło tego samego zasobu. Co więcej, pamięć używana przez te dwie funkcje jest w końcu taka sama, ponieważ z count_all_result nadal wykonujesz get (w kategoriach CI AR), więc polecam ci używanie drugiej (lub użycie count() zamiast), która dała ci możliwość ponownego użycia korzyści.

2

Istnieją dwa sposoby zliczania łącznej liczby rekordów, które zwróci zapytanie. Pierwszy to

$query = $this->db->query('select blah blah'); 
return $query->num_rows(); 

ten powróci liczbę wierszy zapytania wniesione.

drugie

return $this->db->count_all_results('select blah blah'); 

Wystarczy count_all_results będzie wymagać, aby ponownie uruchomić kwerendę.

+0

Pierwsza nie działa w moim przypadku. –

1

Możemy również użyć

return count_all('table_name'); 

lub

$this->db->from('table_name'); 
return $this->db->count_all_result(); 

lub

$query = $this->db->query('select * from tab'); 
return $query->num_rows(); 
0

Łączna liczba wyników

$this->db->count_all_results('table name'); 
0

Po prostu jak poniżej;

$this->db->get('table_name')->num_rows(); 

Otrzyma liczbę rzędów/rekordów. jednak możesz również użyć parametrów wyszukiwania;

$this->db->select('col1','col2')->where('col'=>'crieterion')->get('table_name')->num_rows(); 

Należy jednak zauważyć, że pojawią się złe, złe błędy, jeśli zostaną zastosowane jak poniżej;

$this->db->get('table_name')->result()->num_rows(); 
Powiązane problemy