【发布时间】:2014-07-26 16:16:34
【问题描述】:
我有一个模型,它具有查询学生注册的科目的功能。
public function getAllSubjects($username){
$this->db->select('student.username, subjects.subject_name, teacher.firstname as TeachersFirstName, teacher.surname as TeacherSurname');
$this->db->from('users student');
$this->db->join('student_subjects', 'student.username = student_subjects.student_username', 'inner');
$this->db->join('subjects', 'student_subjects.subject_id = subjects.subject_id', 'inner');
$this->db->join('users teacher', 'subjects.teacher_username = teacher.username', 'inner');
$this->db->where('student.username', $username);
$studentSubjQuery = $this->db->get('users');
return $studentSubjQuery->result_array();
}
在控制器中,我从模型中调用函数并将返回的数组存储到数据中并将其传递给视图。现在,当我尝试打印数组时,行在数组中存储了两次。这是打印出来的数组:
Array
(
[0] => Array
(
[username] => dirkjan021
[subject_name] => Chemistry
[TeachersFirstName] => Teacher 1
[TeacherSurname] => Teacher 1 Surname
)
[1] => Array
(
[username] => dirkjan021
[subject_name] => Chemistry
[TeachersFirstName] => Teacher 1
[TeacherSurname] => Teacher 1 Surname
)
[2] => Array
(
[username] => dirkjan021
[subject_name] => Physics
[TeachersFirstName] => Teacher 1
[TeacherSurname] => Teacher 1 Surname
)
[3] => Array
(
[username] => dirkjan021
[subject_name] => Physics
[TeachersFirstName] => Teacher 1
[TeacherSurname] => Teacher 1 Surname
)
)
这是控制器代码:
public function acads()
{
if (!$this->session->userdata('username')) {
// Redirect to homepage
redirect('../');
} else {
// Allow Access to User's Acads
$data['userInfo'] = $this->session->all_userdata();
// Query User Subjects
$this->load->model('usersubject_model');
$data['userSubjects'] = $this->usersubject_model->getAllSubjects($this->session->userdata('username'));
$this->load->view('view_userAcads', $data);
}
}
更新: 这是根据'$this->output->profiler(TRUE)'的查询:
SELECT `student`.`username`, `subjects`.`subject_name`, `teacher`.`firstname` as TeachersFirstName, `teacher`.`surname` as TeacherSurname
FROM (`users` student, `users`)
INNER JOIN `student_subjects` ON `student`.`username` = `student_subjects`.`student_username`
INNER JOIN `subjects` ON `student_subjects`.`subject_id` = `subjects`.`subject_id`
INNER JOIN `users` teacher ON `subjects`.`teacher_username` = `teacher`.`username`
WHERE `student`.`username` = 'dirkjan021'
【问题讨论】:
-
将
$this->output->enable_profiler(TRUE);放入您的 acads() 方法并重新加载页面。那么您是否也可以将查询复制并粘贴到问题中? -
您是否尝试按条件添加组?
-
@RossWilson 我猜它来自 FROM 行。它有“用户”学生和“用户”。
-
@Filo 你是怎么做到的?它将如何解决问题?
-
@RossWilson 由于可能的罪魁祸首可能是 FROM 行中调用的两个表,我如何才能自我加入我的表。最初,我使用 FROM(用户学生)将其与教师区分开来。如何使用 Codeigniter 将 $query = 分配给 FROM ('users' student)。
标签: php arrays codeigniter loops