2012-04-17 4 views
1

У меня есть следующие таблицы в моей базе данных. Таблицы midterm и finalterm содержат марки студентов.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

Я нашел решение для Вас. Он выберет одну запись для каждого учащегося, охватывающего всю его информацию. Я использовал здесь GROUP_CONCAT mysql. Поэтому на 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); 

ИЛИ Active Record Version

$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']?> 

И Группа Concat Форма запроса товара

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

Еще раз спасибо за вашу помощь. Я пробовал свой скрипт, но я не мог заставить его работать, возможно, есть некоторые проблемы с скриптом в моем файле вида. Не могли бы вы любезно взглянуть на отредактированную часть моего поста выше.Я разместил свой скрипт для контроллера и просмотрел файл. Еще раз спасибо :) –

+0

Большое спасибо, вы просто научили меня новой вещи (group_concat), я понятия не имел об этом раньше. :) Я пытаюсь сделать это для получения дополнительной информации и примеров. спасибо многому человеку. :) –

+0

см. мои правки также, если есть какие-либо вопросы, связанные с codeigniter activerecord, пожалуйста, скажите мне, что я люблю решать и голосовать за меня, если вы считаете, что я заслуживаю –