簡體   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