我正在尝试显示带有相应考试密钥的学生列表。但是我的代码复制了数据,考试密钥被分配给了错误的学生(参见图片我的意思)。有人能告诉我我的代码有什么问题吗?我猜这与我的模型有关,但我不知道该改变什么。
这是我的代码。
控制器
public function loadExamKey($examNo){
$this->load->model('exam_model');
$data = $this->addExamKey($examNo);
$data = $this->exam_logs($examNo);
$data['examKey'] = $this->exam_model->displayExamKeys($examNo);
$this->load->view('exam_key', $data);
}
模型
public function displayExamKeys($examNo){
$this->db->select('student.lastName');
$this->db->select('student.firstName');
$this->db->select('student.middleName');
$this->db->select('student.student_no');
$this->db->select('keys.exam_key');
$this->db->from('student');
$this->db->join('keys', 'student.course_id = keys.course_id');
$this->db->where('exam_no', "$examNo");
$query = $this->db->get();
if($query->num_rows() > 0){
return $query->result();
}
else
return false;
查看
<table class="table table-striped table-advance table-hover">
<tbody>
<tr>
<th><i class="">Student Number</th>
<th><i class=""></i> Name</th>
<th><i class=""></i> Exam Key</th>
</tr>
<?php
if($examKey != NULL){
foreach ($examKey as $row) {
echo '<tr>';
echo '<td>'.$row->student_no.'</td>';
echo '<td>'.$row->lastName.",".$row->firstName." ".$row->middleName.'</td>';
echo '<td>'.$row->exam_key.'</td>';
echo '<tr>';
}
}
我正在使用php codeigniter和postgresql。我刚开始学习这个,我有点困惑。
答案 0 :(得分:0)
为什么使用两个函数来显示数据
在控制器中使用此功能
public function loadExamKey($examNo)
{
$data = $this->addExamKey($examNo);
$data = $this->exam_logs($examNo);
$data['examKey'] = $this->displayExamKey($examNo);
$this->load->view('exam_key', $data);
}
在模型中使用此功能
public function displayExamKeys($examNo)
{
$this->db->select('student.*,keys.exam_key');
$this->db->from('student');
$this->db->join('keys', 'student.course_id = keys.course_id');
$this->db->where('student.exam_no', $examNo);
$this->db->group_by('exam_no');
$query = $this->db->get();
return $query->result();
}
答案 1 :(得分:0)
问题出在你的加入条款中。其余代码看起来不错。尝试更新join子句,如下所示:
$this->db->join('keys', 'student.course_id = keys.course_id', 'left');
如果无效,请尝试使用以下内容显示您的查询:
print_r($query);
或启用探查器:
$this->output->enable_profiler(TRUE);