2015-07-21 3 views
0

Как я могу подсчитать строки из базы данных? У меня есть 3 таблицы, а именно:Codeigniter count rows

questionnaire 
choices 
answer_sheet 

Вот структура таблицы:

опросник

questionnaire_id 
type_id_fk 
question 
answer 
pg 

выбор

choices_id 
questionnaire_id_fk 
type_id_fk 
choices 
pg 

answer_sheet

answer_sheet_id 
questionnaire_id_fk 
choices_id_fk 
user_id_fk 
status 

Мой вопрос, как я могу считать unanswered вопросы и incorrect вопросы?

Вот моя модель:

function countUnanswered($userID, $type) { 
     $this->db->select('*'); 
     $this->db->from('questionnaire q'); 
     $this->db->join('answer_sheet a', 'q.questionnaire_id=a.questionnaire_id_fk'); 
     $this->db->where('q.type_id_fk', $type); 
     $this->db->where('a.user_id_fk', $userID); 
     $query = $this->db->get(); 
     $rowcount = $query->num_rows(); 
     return $rowcount; 
    } 

function countIncorrect($userID, $type) { 
     $this->db->select('*'); 
     $this->db->from('answer_sheet a'); 
     $this->db->join('questionnaire q', 'q.answer!=a.choices_id_fk', 'LEFT'); 
     $this->db->where('q.type_id_fk', $type); 
     $this->db->where('a.user_id_fk', $userID); 
     $query = $this->db->get(); 
     $rowcount = $query->num_rows(); 
     return $rowcount; 
    } 

Вот мое мнение:

<p><label>Unanswered:</label> <span class="badge"><?php echo $countUnanwered = $this->Mresults->countUnanswered('1'); ?></span></p> 
<p><label>Incorrect:</label> <span class="badge"><?php echo $countIncorrect = $this->Mresults->countIncorrect($userID, '1'); ?></span></p> 

Вот мой контроллер

класса Результаты расширяет CI_Controller {

public function view($page = 'results') { 
     if (!file_exists(APPPATH . '/views/pages/results/' . $page . '.php')) { 
      // Whoops, we don't have a page for that! 
      show_404(); 
     } 
     $data['title'] = ucfirst($page) . ' | TOEFL Practice Test'; // Capitalize the first letter 
     $data['page'] = $page; 
     $this->load->view('template/header', $data); 

     if (isset($this->session->userdata['logged_in'])) { 
      $data['userID'] = ($this->session->userdata['logged_in']['userID']); 
      $data['username'] = ($this->session->userdata['logged_in']['username']); 
      $data['email'] = ($this->session->userdata['logged_in']['email']); 

      $userID = $this->session->userdata['logged_in']['userID']; 

      $this->load->view('pages/results/' . $page, $data); 
     } else { 
      $this->load->view('pages/user/login_form', $data); 
     } 

     $this->load->view('template/footer', $data); 
    } 

} 

Я вставил 2 вопроса в таблице в вопросника, и я ответил на эти 2 вопроса, но она возвращает в без ответа функции. Для некорректной функции она возвращает

+0

Вы не включили структуру таблицы и мы не понимаем, 'Я ответил на эти 2 вопроса, но он возвращает 2 в функции без ответа. Для неправильной функции он возвращает 3'. Можете ли вы хотя бы указать имена столбцов для каждой таблицы? – ekad

ответ

0

Я только что получил разрешение самостоятельно.

Вот мое решение:

<?php 
    $total = $this->Mresults->totalQuestions('1'); 
    $answered = $this->Mresults->countAnswered($userID, '1'); 
    $unAnswered = $total-$answered; 
    echo $unAnswered; 
?> 
+1

Вы должны отправить запросы, а затем вы можете принять свой собственный ответ. – gonzalon

0

Пробовали ли вы ничуть COUNT функцию?

Пример:

$this->db->select('user_id, COUNT(user_id) as total'); 
$this->db->group_by('user_id'); 
$this->db->order_by('total', 'desc'); 
$this->db->get('tablename', 10); 

Вы можете посмотреть более here

+0

Я не пробовал. Я, наверное, попробую. Благодарю. –

+0

Спасибо за ваш ответ. Он работает нормально. Но как я могу подсчитать строки, на которые еще не ответили, как я заявил в своем посте. –

+0

Исправлен неверный подсчет? Почему не работает левое соединение без ответа? Каков ваш код на данный момент[email protected] – gonzalon