2012-04-17 15 views
1

私のデータベースには次のテーブルがあります。テーブルmidtermfinaltermには生徒のマークが含まれています。Codeigniter:3つのテーブルから生徒結果シートを生成

enter image description here

今、私は次のような単一ページ内のすべての学生の印シートを表示したい:

enter image description here

私は、単一のテーブルにクエリを実行する方法を知っているが、私は問題に直面していますこの場合には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";} ?> 

私は私のビューファイルを変更したと今それはうまく動作しています:)しかし、私は直面しているいくつかの問題があります。私は上記のスクリプトを実行する場合は、あなたが私のテーブルmidtermに気付いた場合、私は次の出力に

enter image description here

を取得し、あなたは、そのidある3学生は英語と数学の両方で同じマークを持っていることがわかります。しかし、私の出力では、中央の1つのサブジェクトに対してのみマークが表示されます。それはあなたの質問に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); 

またはDISTINCTキーワードを使用してActive Recordのバージョン

$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の最後で使用するために展開する必要があります。あなたの助けのための

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

おかげで再びこの

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

とグループ連結方式の項目フォームクエリと同様。私はあなたのスクリプトを試しましたが、私はそれを動作させることができませんでした、おそらく、私のビューファイル内のスクリプトにいくつかの問題があります。上記の私の記事の編集部分を親切に見てください。私はコントローラとビューファイルのスクリプトを投稿しました。もう一度ありがとうございます:) –

+0

私は新しいこと(group_concat)を教えてくれてありがとうございました。以前はそれについて考えていませんでした。おかげでたくさんの人になりました:) –

+0

codeigniterに関連する質問がある場合にも私の編集を参照してくださいactiverecordあなたが私に納得できると思うなら、私は解決して投票してほしいと教えてください –

関連する問題