Codeigniter:从三个表生成学生成绩单

bla*_*elt 1 mysql codeigniter codeigniter-2

我的数据库中有以下表格.这些表格midtermfinalterm包含学生的痕迹.

在此输入图像描述

现在我想在单页中显示所有学生的标记表,如下所示:

在此输入图像描述

我知道如何在单个表中查询但在这种情况下我遇到问题,因为有三个表.

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

提前致谢 :)

这是我的控制器:

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

更新的部分

这是我的看法:

    <?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";} ?>
Run Code Online (Sandbox Code Playgroud)

我已经更改了我的视图文件,现在它工作正常:)但是我遇到了一些问题.如果我运行上面的脚本,我得到以下输出

在此输入图像描述

如果您注意到我的桌子midterm,您会看到id3岁的学生在英语和数学方面都有相同的分数.但在我的输出中,它只显示中间一个主题的标记.它是否因为您distinct在查询中使用而发生?我试过删除不同但后来它没有显示确切的数据.

请您告诉我如何解决问题?

再次感谢您的帮助.:)

Muh*_*eel 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);
Run Code Online (Sandbox Code Playgroud)

或活动记录版本

$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');
Run Code Online (Sandbox Code Playgroud)

使用distinct关键字.以下是使用此功能的一些说明.1.应该爆发每个组concat以在php端使用.像这样

<?php echo $row['StudentName']?>
Run Code Online (Sandbox Code Playgroud)

和Group Concat Item表单查询

 $midDate   =   explode(',',$row['MidDate']);
 foreach($midDate as $md)
 {
 echo $md;
 echo '<br />'  ;
 }
Run Code Online (Sandbox Code Playgroud)