1

データベースに次のテーブルがあります。テーブルmidtermfinalterm学生のマークが含まれています。

ここに画像の説明を入力

次のように、すべての生徒の成績表を 1 つのページに表示したいと考えています。

ここに画像の説明を入力

単一のテーブルでクエリを実行する方法は知っていますが、この場合、3 つのテーブルがあるため問題に直面しています。

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";} ?>

ビュー ファイルを変更したところ、問題なく動作しています :) しかし、直面している問題がいくつかあります。上記のスクリプトを実行すると、次の出力が得られます

ここに画像の説明を入力

私の表に気がつくと、 3 の生徒が英語と数学の両方で同じ点数を取っているmidtermことがわかります。idしかし、私の出力では、真ん中に 1 つの主題のみのマークが表示されます。クエリで使用distinctしたために発生していますか?個別を削除しようとしましたが、正確なデータが表示されません。

問題を解決する方法を教えてください。

そして、あなたの助けに再び感謝します.:)

4

1 に答える 1

6

私はあなたのための解決策を見つけました。生徒ごとに 1 つのレコードを取得し、すべての情報を続けます。ここでは 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. すべてのグループ連結は、php の最後で使用するために展開する必要があります。このような

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

And Group Concat Item フォーム クエリ

 $midDate   =   explode(',',$row['MidDate']);
 foreach($midDate as $md)
 {
 echo $md;
 echo '<br />'  ;
 }
于 2012-04-17T07:03:41.787 に答える