2012-07-06 160 views
5

這工作:如何在codeigniter中的COUNT查詢上執行num_rows()?

 $sql = "SELECT id 
       FROM `users` 
       WHERE `account_status` = '" . $i . "'"; 
     $query = $this->db->query($sql); 
     var_dump($query->num_rows()); 

但這並不:

 $sql = "SELECT COUNT(*) 
       FROM `users` 
       WHERE `account_status` = '" . $i . "'"; 
     $query = $this->db->query($sql); 
     var_dump($query->num_rows()); 

如何做一個COUNT(*)查詢NUM_ROWS?還有更好的性能明智的第二種方式嗎?

+0

我還要提到用笨的Active Record類來幫助組織代碼的一個位更好。 – 2012-07-06 01:48:37

回答

13

做一個COUNT(*)只會給你包含的行數,而不是結果本身一個單排。

要訪問COUNT(*),你需要做的

$result = $query->row_array(); 
$count = $result['COUNT(*)']; 

第二個選項執行好得多,因爲它不需要返回一個數據集,以PHP而只是計數,因此更加優化。

+3

+1,但可能值得一提的是,您可以爲列添加別名,然後使用它。像'SELECT COUNT(*)AS cnt ...',然後使用'$ result ['cnt']'。 – Corbin 2012-07-06 01:44:59

+0

@Corbin是我必須這樣做,COUNT(*)作爲關鍵不起作用的原因。 – TK123 2012-07-06 15:53:09

+1

跳過一步,直接引用結果,而不是先將它設置爲數組:'COUNT(*)AS cnt ...',然後通過$ query-> row(0) - > cnt'訪問它 – Frug 2013-03-14 19:30:33

0

這將只返回1行,因爲你只是選擇COUNT()。你會在這種情況下使用mysql_num_rows()$query

如果要獲得每個ID的計數,請將GROUP BY id添加到字符串末尾。

性能明智的,不要永遠永遠永遠使用*在查詢中。如果表格中有100個唯一字段,並且您想要全部獲取它們,則可以全部寫出100個字段,而不是*。這是因爲*必須重新計算有多少場去,每一次它抓住一個領域,這需要更多的時間來打電話。您COUNT()查詢

4

NUM_ROWS將字面上永遠是1.它是不帶GROUP BY子句的集合函數,因此所有的行組合成一個。如果你想要計數的的值,你應該給它一個標識符SELECT COUNT(*) as myCount ...,然後使用你的普通方法訪問一個結果(第一個,唯一的結果)並獲得它的'myCount'屬性。

0

我建議,而不是做另一個查詢,只需立即運行SELECT FOUND_ROWS()

6

在CI它真的很簡單實際上是相同的參數,你需要的是

$this->db->where('account_status', $i); 
$num_rows = $this->db->count_all_results('users'); 
var_dump($num_rows); // prints the number of rows in table users with account status $i 
5
$query->num_rows() 

數查詢返回的行。注意:在這個例子中,$查詢,查詢結果對象賦給變量:

$query = $this->db->query('SELECT * FROM my_table'); 

echo $query->num_rows(); 
0
$list_data = $this->Estimate_items_model->get_details(array("estimate_id" => $id))->result(); 
    $result = array(); 
    $counter = 0; 
    $templateProcessor->cloneRow('Title', count($list_data)); 
    foreach($list_data as $row) { 
     $counter++; 
     $templateProcessor->setValue('Title#'.$counter, $row->title); 
     $templateProcessor->setValue('Description#'.$counter, $row->description); 
     $type = $row->unit_type ? $row->unit_type : ""; 
     $templateProcessor->setValue('Quantity#'.$counter, to_decimal_format($row->quantity) . " " . $type); 
     $templateProcessor->setValue('Rate#'.$counter, to_currency($row->rate, $row->currency_symbol)); 
     $templateProcessor->setValue('Total#'.$counter, to_currency($row->total, $row->currency_symbol)); 
    } 
0
$query = $this->db->get(); 
if ($query->num_rows() > 0) { 
    echo 'have row'; 
} else { 
    echo 'no row return from db'; 
} 
相關問題