首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多重连接码点火器

使用多重连接码点火器
EN

Stack Overflow用户
提问于 2014-10-24 05:42:12
回答 1查看 89关注 0票数 0

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

课程

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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)。

以下是所需输出的示例

代码语言:javascript
复制
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。

下面是我用来生成结果但生成错误结果的查询:

代码语言:javascript
复制
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

以下是查询输出:

代码语言:javascript
复制
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都显示,这不应该是一个学生在一个学期的情况,因为学生只能一次只能学习一个班级。

EN

回答 1

Stack Overflow用户

发布于 2015-03-11 10:18:18

这就是我在连接三个表时所做的,您可能从这段代码中得到一些了解。

代码语言:javascript
复制
$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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26542151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档