2009-08-03 36 views
56

Tôi rất mới đối với CodeIgniter và Active Record nói riêng, tôi biết cách làm tốt điều này trong SQL bình thường nhưng tôi đang cố gắng tìm hiểu.CodeIgniter Active Record - Nhận số hàng trả về

Làm cách nào để chọn một số dữ liệu từ một trong các bảng của tôi, sau đó đếm số hàng được trả về bằng cách sử dụng lớp ActiveIgniters Active Record?

Cảm ơn, Tom.

Trả lời

107

Hãy nhìn vào các chức năng kết quả here:

$this->db->from('yourtable'); 
[... more active record code ...] 
$query = $this->db->get(); 
$rowcount = $query->num_rows(); 
+0

Tôi đã đập đầu của tôi trong nhiều giờ, tôi không thể nhớ tên của chức năng ... và nó cũng không dễ tìm trong tài liệu chính thức. Tôi đã sử dụng 'print_r' trên đối tượng kết quả từ phương thức' get_where' để đoán tên của hàm đó! =) – aL3xa

+0

@Residuum bạn có thể giúp tôi giải quyết vấn đề này [truy vấn-num-hàng-không-trả-đúng-số-hàng-khi-kết quả-là-không-trống] (https://stackoverflow.com/ câu hỏi/45397106/query-num-rows-không-return-correct-number-of-row-khi-kết quả-là-không-trống) –

35

AND, nếu bạn chỉ muốn có được một số của tất cả các hàng trong một bảng

$table_row_count = $this->db->count_all('table_name'); 
+0

Cảm ơn bạn rất nhiều. –

8

Just gotta đọc con trai docs !

$query->num_rows(); 
15

Nếu bạn chỉ cần số lượng hàng trong một truy vấn và không cần các dữ liệu hàng thực tế, sử dụng count_all_results

echo $this->db 
     ->where('active',1) 
     ->count_all_results('table_name'); 
29

này đi cho bạn mô hình:

public function count_news_by_category($cat) 
{ 
    return $this->db 
     ->where('category', $cat) 
     ->where('is_enabled', 1) 
     ->count_all_results('news'); 
} 

Đó là một ví dụ từ dự án hiện tại của tôi.

Theo benchmarking truy vấn này hoạt động nhanh hơn nếu bạn làm như sau:

$this->db->select('*')->from('news')->where(...); 
$q = $this->db->get(); 
return $q->num_rows(); 
2

Đây cũng là một chức năng rất hữu ích nếu bạn đang tìm kiếm một hàng hoặc dữ liệu với nơi mà điều kiện ảnh hưởng

function num_rows($table) 
    { 
     return $this->db->affected_rows($table); 
    } 
3

Bạn có thể thực hiện việc này theo hai cách khác nhau:

1. $this->db->query(); //execute the query 
    $query = $this->db->get() // get query result 
    $count = $query->num_rows() //get current query record. 

    2. $this->db->query(); //execute the query 
     $query = $this->db->get() // get query result 
     $count = count($query->results()) 
      or count($query->row_array()) //get current query record. 
2
$this->db->select('count(id) as rows'); 
$this->db->from('table_name'); 
$this->db->where('active',1); 
$query = $this->db->get(); 
foreach($query->result() as $r) 
{ 
    return $r->rows; 
} 
+0

Điều này gây ra một truy vấn 'SELECT' được đưa ra bao gồm một cuộc gọi hàm SQL' COUNT() '. Câu trả lời được chấp nhận nên được thực hiện thay vì nó ngăn chặn điều này bằng cách gọi '$ query-> num_rows()' thay thế. Ví dụ, 'num_rows()' của trình điều khiển mysqli trả về kết quả của 'mysqli_num_rows()' hàm PHP cho id truy vấn cuối cùng. Xin lưu ý: 'Không phải tất cả các trình điều khiển cơ sở dữ liệu đều có cách lấy tổng số hàng cho một tập kết quả. Khi trường hợp này xảy ra, tất cả dữ liệu được tìm nạp trước và count() được gọi thủ công trên mảng kết quả để đạt được cùng một kết quả.' (từ tài liệu). – Roland

+0

CI3: https://www.codeigniter.com/userguide3/database/results.html#result-helper-methods – Roland

0
function getCount(){ 
    return $this->db->get('table_name')->num_rows(); 
} 
Các vấn đề liên quan