Codeigniter 3加入2/3表

时间:2016-07-13 14:03:43

标签: php mysql codeigniter

我正在使用Codeigniter,我需要加入2/3表。我无法解决这个问题。

我有一个users表,其中包含一般用户信息。

user_id
first_name
last_name

我有一个课程统计页面,其中包含截止日期等信息。

id
course_id
user_id
due
completed_on

用户将选择一个课程,然后会看到他们组织的用户列表。准备分配。用户可能已经被分配到课程并且在统计表中有统计数据,而其他用户可能没有统计数据。

因此,如果统计数据当然存在,我需要显示所选课程的任何统计数据的用户列表。

所以,我正在向模型发送一个org_id(以获取该组织的用户列表)和所选的course_id(如果存在,则从他的统计表中检索任何统计数据)

这是我在模型中的方法

// get users for an org along with stats
public function get_course_user_data($org_id,$course_id) {
    $user_array = array('users.org_id =' => $org_id);       
    $this->db->select('users.id,users.first_name,users.last_name,training_stats.due,training_stats.completed_on');
    $this->db->order_by('users.first_name', 'asc');
    $this->db->where($user_array);
    $this->db->join('training_stats','training_stats.user_id = users.id', 'left');
    $this->db->join('training_courses','training_courses.course_id = training_stats.course_id', 'left');
    $user_object = $this->db->get('users'); 
    return $user_object->result();
}   

目前,如果stats表中有统计数据,那么它会显示数据,如果stats表中没有统计数据,我什么也得不到。

但是我需要一个完整的用户列表,如果存在则只需要统计数据。

我甚至可以通过加入来做到这一点吗?我会这样呢?

2 个答案:

答案 0 :(得分:0)

尝试此查询:

// get users for an org along with stats
public function get_course_user_data($org_id,$course_id) {
    $this->db->select('users.id,users.first_name,users.last_name,training_stats.due,training_stats.completed_on');
    $this->db->order_by('users.first_name', 'asc');
    $this->db->join('training_stats','training_stats.user_id = users.id', 'left');
    $this->db->join('training_courses','training_courses.course_id = training_stats.course_id', 'left');
    $this->db->where("( training_courses.course_id = $course_id AND training_stats.course_id = $course_id)" );
    $this->db->or_where( "( users.org_id = $org_id )" );
    $user_object = $this->db->get('users'); 
    return $user_object->result();
}

答案 1 :(得分:0)

我觉得你忘记了......

$this->db->from('table_name');

之后......

$this->db->select('users.id,users.first_name,users.last_name,training_stats.due,training_stats.completed_on');

我希望这个帮助