2012-04-17 111 views
1

我的数据库中有以下表格。表midtermfinalterm包含学生的标记。Codeigniter:从三个表生成学生成绩单

enter image description here

现在我要像下面显示所有的学生都在一个页面的标记表:

enter image description here

我知道如何在单表查询,但我面临的问题这种情况下有三张表。

我正在使用Codeigniter,请您帮助我在我的模型和视图文件中编码?

感谢提前:)

这是我的控制器:

  $this->load->model('Mod_student'); 
    $data['records1']= $this->Mod_student->check1(); 
     $this->load->view('view_student',$data); 

更新部分

这是我的看法:

<?php if(count($records1) > 0) { ?> 

     <?php foreach ($records1 as $row){ ?> 



    <table> 
    <tr> <td><?php echo $row['StudentName']; ?></td></tr> 

    <tr> 

     <td><?php $midDate = explode(',',$row['MidDate']); 
    foreach($midDate as $md) 
     { 
     echo $md; 
     echo '<br />' ; 
     } 
    ?> 
     </td> 

     <td><?php $midDate = explode(',',$row['MidSubject']); 
    foreach($midDate as $md) 
     { 
     echo $md; 
     echo '<br />' ; 
     } 
    ?> 
     </td> 

     <td><?php $midDate = explode(',',$row['MidMarks']); 
    foreach($midDate as $md) 
     { 
     echo $md; 
     echo '<br />' ; 
     } 
    ?> 
     </td> 



     </tr> 





    </table> 




<?php } ?> 

<?php } else { echo "No Record Found";} ?> 

我已经改变了我的看法文件现在它工作正常:)但我遇到了一些问题。如果我运行上面的脚本中,我得到以下输出

enter image description here

如果你发现我的表midterm,你会看到它的id是3学生已得到了英语和数学用相同的标记。但是在我的输出中,它只显示中间只有一个主题的标记。这是因为您在查询中使用了distinct吗?我试图删除独特的,但它并没有显示确切的数据。

请你请告诉我如何解决这个问题?

并再次感谢您的帮助:)

回答

6

我找到了适合您的解决方案。它会为每个学生提供一条记录,记录他的所有信息。我在这里使用了mysql的GROUP_CONCAT。因此,在PHP的结束,你将不得不爆炸的价值,然后在循环中访问它。顺便说一句,这里是查询你可以像这样运行它。

$query= "select 
      s.id as SID, 
      s.name as StudentName, 
      (select group_concat(distinct midterm.date) from midterm where midterm.student_id = SID) as MidDate, 
      (select group_concat(distinct midterm.Subject) from midterm where midterm.student_id = SID) as MidSubject, 
      (select group_concat(midterm.marks) from midterm where midterm.student_id = SID) as MidMarks, 
      (select group_concat(distinct finalterm.date) from finalterm where finalterm.student_id = SID) as FinalDate, 
      (select group_concat(distinct finalterm.marks) from finalterm where finalterm.student_id = SID) as FinalMarks, 
      (select distinct sum(midterm.marks) from midterm where midterm.student_id = SID) as MidTotal, 
      (select distinct sum(finalterm.marks) from finalterm where finalterm.student_id = SID) as FinalTotal 
      from students as s 
      left join midterm as m on m.student_id = s.id 
      left join finalterm as f on f.student_id = s.id 
      and f.subject = m.subject 
      group by s.name;"; 

    $query = $this->db->query($query); 

或活动记录版本

$data = array(
        's.id as SID', 
        's.name as StudentName', 
        '(select group_concat(distinct midterm.date) from midterm where midterm.student_id = SID) as MidDate', 
        '(select group_concat(distinct midterm.Subject) from midterm where midterm.student_id = SID) as MidSubject', 
        '(select group_concat(midterm.marks) from midterm where midterm.student_id = SID) as MidMarks', 
        '(select group_concat(distinct finalterm.date) from finalterm where finalterm.student_id = SID) as FinalDate', 
        '(select group_concat(distinct finalterm.marks) from finalterm where finalterm.student_id = SID) as FinalMarks', 
        '(select distinct sum(midterm.marks) from midterm where midterm.student_id = SID) as MidTotal', 
        '(select distinct sum(finalterm.marks)from finalterm where finalterm.student_id = SID) as FinalTotal'    
        ); 
    $this->db->select($data); 
    $this->db->group_by('s.name'); 
    $this->db->group_by('s.name'); 
    $this->db->from('students as s'); 
    $this->db->join('midterm as m','m.student_id = s.id','left'); 
    $this->db->join('finalterm as f','f.student_id = s.id','left'); 
    $this->db->group_by('s.name'); 

具有鲜明的关键字。这里有一些说明使用它。 1.每组concat都应该被爆炸以便在php结束时使用。像这样

<?php echo $row['StudentName']?> 

和组的毗连项形式再次查询

$midDate = explode(',',$row['MidDate']); 
foreach($midDate as $md) 
{ 
echo $md; 
echo '<br />' ; 
} 
+0

感谢您的帮助。我已经尝试了你的脚本,但是我无法让它工作,可能在我的视图文件中有一些脚本问题。请您好好看看我上面的帖子的编辑部分。我已经发布了我的脚本Controller和查看文件。再次感谢:) – 2012-04-17 07:32:04

+0

非常感谢你,你刚刚教我一个新东西(group_concat),之前我不知道它。:)我正在尝试谷歌它的更多信息和示例。 :) – 2012-04-17 07:38:25

+0

看到我的编辑也如果有任何问题Codeigniter activerecord请告诉我我爱解决并投票给我,如果你认为我值得 – 2012-04-17 08:33:42