【问题标题】:using multiple joins codeigniter使用多个连接代码点火器
【发布时间】:2014-10-24 05:42:12
【问题描述】:

我正在开发一个学术 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 都显示,对于一个学期的学生来说不应该是这样,因为一个学生一次只能学习一门课。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 抱歉忘记输入我使用的查询(产生错误的结果)。问题是用插入的问题编辑的@RossWilson
  • 它在哪里/如何显示 MT-001 课程已参加但未通过?

标签: php mysql codeigniter join


【解决方案1】:

这是我为加入三个表所做的,您可能会从这段代码中得到一些想法。

$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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2011-06-04
    • 2016-01-28
    • 2012-06-30
    相关资源
    最近更新 更多