繁体   English   中英

使用多个联接codeigniter

[英]using multiple joins codeigniter

我正在使用学术CMS,必须显示使用多个联接从5个表中提取的查询结果。 我没有得到所需的结果。 这是表模式:

class_id    class_year  class_semester  class_course    class_status
1           2014         6                   5               1
2           2014         6                   3               1
3           2014         6                   1               1
4           2014         6                   2               1
5           2014         6                   6               1

在这里, class_coursecourse表中的外键,如course_id

班级学生

class_student_id    class_id    student_id  class_marks
       1                1          s-14-1        5
       2                2          s-14-1        2
       3                2          s-14-2        0

课程

course_id   course_code course_name             course_credit
    1         MT-001    Calculus I                    3
    2         MT-002    Calculus II                   3
    3         CS-001    Computer Programming          4
    4         CS-002    Computer Fundamental          4
    5         MG-001    Fundamental of Management     3
    6         CS-098    Advance Programming           4

course_offer

co_id   co_semester course_code
  1          1         MT-001
  2          1         CS-002
  3          1         MG-001
  4          1         CS-001
  5          2         CS-098
  6          2         MT-002

在这里, co_semester显示该课程是为学期要求为1、2、3、4等的学生提供的。

course_prerequisite

cp_id   course_id   prereq_id
  1           6           3
  2           2           1

在这里, course_idprereq_idcourse表中的外键,作为course_id

现在,所需的查询输出基于以下条款/条件:

显示所有活动的类( class_status=1 )和...

  1. 没有任何必修课程(将class_coursecourse_prerequisite表进行比较)并且以前从未学习过( class_student.class_id应该不可用)
  2. 没有先修课程但已学习并失败的学生,现在再次安排该课程学习
  3. 具有先修课程但已通过先修课程的学生( class_student.class_marks > 50

这是所需输出的样本

year semester course_code course_name                   course_credit
2014    6         MG-001    Fundamental of Management        3
2014    6         CS-001    Computer Programming             4
2014    6         MT-001    Calculus I                       3

MG-001,CS-001和MT-001在这里没有先决条件,并且之前没有研究过,因此必须向学生展示。

从课堂表

CS-0098具有先决条件类CS-001计算机编程,以前没有研究过,因此请不要显示CS-0098,而要显示CS-001计算机编程

类似地:

MT-002具有先决条件类MT-001,该类已研究但失败。 因此,不要显示MT-002,而要显示MT-001。

这是我用来生成结果但产生错误结果的查询:

SELECT 
    cl.class_id,cr.course_id,cr.course_code,cr.course_name,cr.course_credit 
FROM class cl 
LEFT JOIN course cr 
    ON cl.class_course=cr.course_id 
LEFT JOIN course_offer co 
    ON co.course_code=cr.course_code 
LEFT JOIN class_student cs 
    ON cl.class_id=cs.class_id 
    AND cs.student_id='S-14-1' 
    AND cl.class_status=1 
    AND co.co_semester<=2 
WHERE 
    cs.class_id IS NULL

这是查询输出:

class_id    course_id   course_code course_name           course_credit
   3           1          MT-001    Calculust 1                 3
   4           2          MT-002    Calculus 2                  3
   5           6          CS-098    Advance Programming         4

在这里,显示了微积分I和微积分II,这对于一个学期的学生而言并非如此,因为一个学生一次只能学习一个班级。

这就是我为连接三个表所做的工作,您可能会从这段代码中得到一些想法。

$this->db->select(array('u.name', 'u.companyname','i.phone','i.address','u.email','i.state','i.city','i.pincode','i.area','i.description','i.image', 'c.name AS categoryname'));
    $this->db->from('tbl_user as u');
    $this->db->join('tbl_userinfo as i', 'i.user_id = i.user_id');
    $this->db->join ('tbl_category as c', 'c.category_id = i.service_category');
    $this->db->group_by(array('u.user_id')); 
    $this->db->where(array('u.group_id' => 16));        
    $query = $this->db->get ();
    return $query->result();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM