2010-09-08 3 views
6

Мне не очень повезло обнаружить, когда запрос базы данных в Codeigniter возвращает нулевые результаты. Я хорошо прочитал заметки о функции подсчета PHP, но я не мудрее!Подсчет количества результатов, возвращаемых запросом базы данных в Codeigniter

Я называю запрос/представление, как следует из контроллера:

$data['result'] = $this->search_model->do_search(set_value('name')); 
$data['title'] = "Search results"; 
$this->load->view('search_view',$data); 

Представления генерирует таблицу результатов для меня нормально, но когда я пытаюсь и ловушки пустого результата, счетчик всегда возвращает 1:

Я попытался if count(array($result)) и просто if count($result)

Так что это хороший способ получить счетчик? Я использую Fedora 13 с PHP 5.3.3 на своем ноутбуке dev.

ответ

11

Посмотрите на $query->num_rows (< - clickable).

+0

Да, я могу видеть, как я мог бы использовать это в модели, чтобы возвращать количество строк, но тогда мне пришлось бы передать значение в представление, которое, кажется, долгий путь для решения вопросов? – Linker3000

+0

- Извините, я вижу, что на самом деле я могу использовать $ result-> num_rows в представлении, а также в исходном запросе в модели. Будет ли это рассматривать в порядке? – Linker3000

+0

Не совсем. Вместо этого вы должны вернуть массив из своей модели. Один элемент - это счет, а другой - результат. Я обычно возвращаю результаты row_array из модели, кстати. – janosrusiczki

0

Попробуйте if(isset($result) && count($result)) в вашем файле вида, а затем в инструкции if вы можете написать код, который вы хотите выполнить, когда вставки в вашем db больше 0 ... удачи!

+0

Проблема с count ($ result) заключается в том, что она всегда возвращает 1, даже если есть, скажем, 0, 7 или 70 результатов. – Linker3000

8

Самое лучшее, что делать в вашей модели заключается в следующем:

$query = $this->db->something().... 
... 
... 
if ($query->num_rows() > 0) 
{ 
    return $query->result(); 
} 
else 
{ 
    return FALSE; 
} 

Затем в контроллере или просмотреть вам сделать следующее:

if (!empty($my_db_result)) 
{ 
    ...... 
} 

Этот процесс позволяет реагировать на результат основан на типе результата. Если строки могут быть восстановлены, это вернет массив, из которого элементы могут быть подсчитаны функцией count() PHP. Поскольку второй блок проверяет, является ли результат пустым (обратите внимание, что «FALSE» рассматривается как пустой), вы не столкнетесь ни с какими проблемами (например, при использовании цикла foreach), и вы можете указать, что делать, если бы не было Результаты.

+0

Спасибо Yorick.Я отметил ответ Кичеша как мой принятый ответ, так как сначала предложил num_rows, но ваше объяснение велико для ясности. – Linker3000

+0

Ничего страшного :) –

0

Если вы положили count($result) в инструкцию if, тогда, когда она успешно завершена, она возвращает только 1.

Вы можете попробовать $query->num_rows() по-другому.

0

, например, я считаю, чтобы показать администраторов, связанные анс пользователи, подключенные

Database

пользователей я добавить таблицу: [статус] [INT] [1]

пользователей Также я : [роль] [VARCHAR] [255]

Обновление Statut 1 (onligne) в авторизации (проверки)

if($this->model_users->can_log_in($email,$pass)){ 
$update = array('status' => 1); 
$this->model_users->update_onligne($email,$update); 
redirect('main/members'); 

и модель:

public function update_onligne($email,$update){ 
     $this->db->where('email',$email); 
     $this->db->update('users',$update); 
     return true; 
    } 

Обновление состояния на автономный выход из системы() контроллер

Выход: режим

public function logout(){ 
     $id = $this->session->userdata('id'); 
     $update = array('status' =>0); 
     $this->model_users->logout($id,$update); 
     $this->session->sess_destroy(); 
     redirect('main/login'); 
    } 

Выход л:

public function logout($id,$update){ 
     $this->db->where('id',$id); 
     $this->db->update('users', $update); 
     return; 
    } 

Граф Onligne:

Контроллер:

$data['admin_onligne'] = $this->model_users->count_onligne_admin(); 
$data['user_onligne'] = $this->model_users->count_onligne_users(); 
$this->load->view('template/page_left',$data); 

Модель:

public function count_onligne_admin(){ 
      $query = $this->db->query('SELECT COUNT(status) AS enligneadmin FROM users WHERE status=1 AND role="admin"')->row_object(); 
      return $query->enligneadmin; 
     } 

public function count_onligne_users(){ 
      $query = $this->db->query('SELECT COUNT(status) AS enligneuser FROM users WHERE status=1 AND role="etudiant"')->row_object(); 
      return $query->enligneuser; 
     } 

Зритель

<span><?php echo $user_onligne ;?> User en ligne</span> 
<span><?php echo $admin_onligne ;?> Admin en ligne</span> 
0

Я dowing это и workd для меня

Контроллер

$id = $this->session->userdata('id'); 
if($this->model_users->if_user_dont_have_email($id)){ 
.... 
} 

Модель Пользователи

public function if_user_dont_have_email($id){ 
    $query = $this->db->query("SELECT email FROM users WHERE id='$id'"); 
    if ($query->num_rows() > 0) { 
     $row = $query->row_array(); 
     if(empty($row['email'])){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
} 
Смежные вопросы