2009-08-03 2 views
56

Я очень новичок в CodeIgniter и Active Record, в частности, я знаю, как это сделать в обычном SQL, но я пытаюсь учиться.CodeIgniter Active Record - Получить количество возвращенных строк

Как выбрать некоторые данные из одной из моих таблиц, а затем подсчитать, сколько строк будет возвращено с помощью класса ActiveX класса CodeIgniters?

Thanks, Tom.

ответ

107

Посмотрите функции результата here:

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

Я часами стучал головой, я не мог вспомнить имя функции ... и это также нелегко найти в официальной документации. Я использовал 'print_r' на объекте, полученном методом' get_where', чтобы угадать имя функции! =) – aL3xa

+0

@Residuum вы можете помочь мне решить эту проблему [запрос-num-rows-not-return-correct-number-of-row-when-result-is-not-empty] (https://stackoverflow.com/ вопросы/45397106/query-num-rows-not-returns-correct-number-of-row-when-result-is-not-empty) –

35

И, если вы просто хотите, чтобы получить количество всех строк в таблице

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

Спасибо, очень. –

8

Просто нужно прочитать документы сына !

$query->num_rows(); 
15

Если вам нужно только количество строк в запросе и не нужны фактические данные строки, используйте count_all_results

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

Это идет к вам модели:

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

Это пример моего нынешнего проекта.

Согласно benchmarking этот запрос работает быстрее, чем если вы сделаете следующее:

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

Это также очень полезная функция, если вы ищете строки или данные с, где состояние пострадавших

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

Вы можете сделать это двумя различными способами:

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

Это вызывает запрос 'SELECT', включающий вызов функции' COUNT() 'SQL. Принимаемый ответ следует принять вместо этого, поскольку он предотвращает это, вызывая вместо этого '$ query-> num_rows()'. Например, 'num_rows()' из драйвера mysqli возвращает результат функции mysqli_num_rows() 'PHP для последнего идентификатора запроса. Обратите внимание: «Не все драйверы баз данных имеют собственный способ получения общего количества строк для набора результатов. Когда это так, все данные предварительно заполнены, и count() вызывается вручную в результирующем массиве для достижения того же результата. '(Из документации). – 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(); 
} 
Смежные вопросы