Подсчитывать строки в базе данных, где

#php #mysql #codeigniter #activerecord #codeigniter-2

#php #mysql #codeigniter #activerecord #codeigniter-2

Вопрос:

Я следую руководству по разбивке на страницы с помощью CI / jQuery. В руководстве они получают общее количество строк, выполняя:


$config['total_rows'] = $this->db->count_all('tblUsers');

Они получают общее количество пользователей для определения разбивки на страницы. Тем не менее, они получают ВСЕ пользователи. В моем приложении мне нужны только пользователи с определенным присвоенным им значением, в данном случае ‘role’.

Мне нужны только пользователи, где role = 1 в моей базе данных.

Я попробовал пару вещей с ->count() (из класса Active Record DB CI) или пытаясь count() проверить, сколько «строк» имеет массив, но я не смог получить нужный мне результат. Я также пытался выполнить обычный запрос: select count(*) from tblusers where role = 1 а затем каким-то образом попытался узнать, сколько он вернул, но, увы.

Выполнение

 $config['total_row'] = $this->db->query("select count(*) from tblusers where role = '1'")->result_array();
  

выдает мне следующий массив:

Array ( [0] => Array ( [count(*)] => 2 ) )

Однако, похоже, я не могу прочитать count(*) индекс..

Message: Undefined index: count(*)

Я надеюсь, что в этом есть какой-то смысл. В основном я пытаюсь сделать что-то вроде..

$this->db->where('role', 1)->get('tblUsers')->count()

К сожалению, это не работает : D

Заранее спасибо. Приветствуется любая помощь.

Ответ №1:

Вы могли бы просто создать псевдоним для count(*) столбца результатов:

 select count(*) as number_of_entries from tblusers where role = '1'
  

Теперь вы можете использовать number_of_entries в качестве ключа из результирующего массива для доступа к нужному значению.

Комментарии:

1. Хи-хи, я чувствую себя таким глупым сейчас из-за того, что не заметил этого. Всегда пытаюсь сделать что-то сложнее : ( Спасибо!

Ответ №2:

Не является положительным, но, похоже, все, что вам нужно, это присвоить этому столбцу имя. Например,

 ... = $this->db->query("select count(*) as colname from tblusers where role = '1'")->result_array();
  

Я подозреваю, что это сработает.

Ответ №3:

Для чтения индекса count (*) используйте следующее, чтобы создать поле для чтения:

 select count(*) as cnt from tblusers where role = 1
  

Теперь у вас будет:

 Array ( [0] => Array ( [cnt] => 2 ) )