За последние 24 часа нас посетили 17788 программистов и 1625 роботов. Сейчас ищут 1320 программистов ...

Помогите доделать вывод из БД в excel

Тема в разделе "Сделайте за меня", создана пользователем homedj, 23 окт 2014.

  1. homedj

    homedj Новичок

    С нами с:
    23 окт 2014
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте!
    Есть электронный школьный журнал, который позволяет выгружать оценки в .xls файл.
    Но недавно появились сдвоенные уроки в расписании и поэтому понадобилось, чтобы выгружались дублирующиеся даты, то есть, если в один день были 2 одинаковых урока, то за каждый из них выставляется оценка и нужно выгружать именно 2 эти даты с оценками.
    Пока не могу добиться результата, запутался с циклами.
    Буду благодарен, если кто поможет с кодом или подскажет какой фрагмент поправить, чтобы все остальное работало.

    download.php
    Код (Text):
    1. $sql="SELECT sol.student_id, s.last_name, s.first_name, s.middle_name, l.lesson_date, sol.grade
    2. FROM `students_on_lesson` AS sol
    3. JOIN students_in_class AS sic ON sic.student_id = sol.student_id
    4. JOIN classes AS c ON c.class_id = sic.class_id
    5. JOIN lessons AS l ON l.lesson_id = sol.lesson_id
    6. JOIN students AS s ON s.student_id = sol.student_id
    7. WHERE c.class_id={$_POST['class_id']} AND sol.subj_id={$_POST['subject_id']}";
    8.  
    9. $sql="Select * from classes where class_id={$_POST['class_id']}";
    10. $res=mysql_query($sql);
    11. $names=mysql_fetch_array($res);
    12.  
    13. $sql="SELECT s.student_id, s.last_name, s.first_name, s.middle_name FROM `classes` as c
    14. join  students_in_class as sic on sic.class_id=c.class_id
    15. join students as s on s.student_id=sic.student_id
    16. WHERE c.class_id={$_POST['class_id']}
    17. order by s.last_name";
    18.  
    19. $query_dates="SELECT * FROM lessons WHERE subject_id={$_POST['subject_id']} order by lesson_date";
    20. $result_dates=mysql_query($query_dates);
    21. while ($dates=mysql_fetch_array($result_dates)) {
    22.     $lessons_date[$dates['lesson_date']]=0;
    23. }
    24.  
    25. $i=1;
    26. $query=$sql;
    27. $res=mysql_query($query);
    28.  
    29. //Создание Excel документа-------------------------------------------------------------------------------------------
    30.  
    31. include_once 'phpexcel/PHPExcel/IOFactory.php';
    32.  
    33. $objPHPExcel = PHPExcel_IOFactory::load("1.xls");
    34.  
    35. $objPHPExcel->setActiveSheetIndex(0);
    36. $aSheet = $objPHPExcel->getActiveSheet();
    37. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 0, 1, $_POST['class_id']  );
    38. /** select lesson by subject **/
    39. $sqlLesson = "SELECT `d`.`discipline` FROM `disciplines` as `d`, `subjects` as `s` WHERE `s`.`discipline_id` = `d`.`discipline_id` AND `s`.`subject_id` = {$_POST['subject_id']} LIMIT 0, 1";
    40. $lessonName=mysql_query($sqlLesson);
    41. $lessonName = array_shift(mysql_fetch_array($lessonName));
    42. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 1, 1, $lessonName );
    43. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 9, 1,  "Ведомость успеваемости для {$names['class']}-{$names['letter']} класса" );
    44. $sqlTeacher = "SELECT `t`.`last_name`, `t`.`first_name`, `t`.`middle_name` FROM `teachers` as `t`, `subjects` as `s` WHERE `s`.`teacher_id` = `t`.`teacher_id` AND `s`.`subject_id` = {$_POST['subject_id']} LIMIT 0, 1";
    45. $teacherInfo=mysql_query($sqlTeacher);
    46. $teacherInfo = mysql_fetch_array($teacherInfo);
    47. $fioTeacher = $teacherInfo['last_name'] . " " . $teacherInfo['first_name'] . " " . $teacherInfo['middle_name'];
    48. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 2, 1, $fioTeacher);
    49.  
    50. $i=$i+2;
    51. $pos=0;
    52.  
    53. while ($row=mysql_fetch_array($res)) {
    54.  
    55. $students[]=$row['student_id'];
    56. $fio=$row['last_name']." ".$row['first_name']." ".$row['middle_name'];  
    57.  
    58. $sql2="SELECT  s.student_id, l.lesson_date, sol.grade FROM `classes` as c
    59. left join  students_in_class as sic on sic.class_id=c.class_id
    60. left join students as s on s.student_id=sic.student_id
    61. left join students_on_lesson as sol on sol.student_id=sic.student_id
    62. left join lessons as l on l.lesson_id=sol.lesson_id
    63. WHERE c.class_id={$_POST['class_id']} and s.student_id={$row['student_id']} AND sol.subj_id={$_POST['subject_id']}
    64. order by s.last_name, l.lesson_date";
    65.  
    66. $array[$row['student_id']]=$lessons_date;
    67. $res2=mysql_query($sql2);
    68. while($row2=mysql_fetch_array($res2)) {
    69.    
    70.     $array[$row2['student_id']][$row2['lesson_date']]=$row2['grade'];
    71.    
    72. }
    73. foreach($array as $idStudent=>$lessonInfo){
    74.   $array[$idStudent]['grade'] = false;
    75.   foreach($lessonInfo as $grade){
    76.     if(!empty($grade)){
    77.       $array[$idStudent]['grade'] = true;
    78.       break 1;
    79.     }
    80.   }
    81. }
    82. if($array[$idStudent]['grade']){
    83.   $i++;
    84.   $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 0, $i, iconv("cp1251", "utf-8", $row['student_id'] ));
    85.   $pos++;
    86.   $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 1, $i, iconv("cp1251", "utf-8", $pos ));
    87.   $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 2, $i,  $fio);
    88. }
    89. }
    90.  
    91. $i=2;
    92. $y=3;
    93. foreach($lessons_date as $key=>$lesson)
    94. {
    95. $i++;
    96. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( $i, 3, iconv("cp1251", "utf-8", $key ));
    97. }
    98.  
    99. $i=4;
    100. $y=3;
    101.  
    102. foreach($students as $key=>$student_id) {
    103.     if ($array[$student_id]['grade']){
    104.            
    105.     foreach($lessons_date as $key2=>$lesson)
    106.     {
    107.         if ($array[$student_id][$key2]!="0") {
    108.             $st_grade=$array[$student_id][$key2];
    109.         }
    110.         else
    111.         {
    112.             $st_grade='';
    113.         }
    114.         $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( $y, $i,  $st_grade );
    115.         $y++;
    116.     }
    117.    
    118. $y=3;  
    119. $i++;  
    120.     }
    121. }
    122.  
    123. //Стили границ таблицы
    124. $styleArray = array(
    125.     'borders' => array(
    126.         'allborders' => array(
    127.             'style' => PHPExcel_Style_Border::BORDER_THIN,
    128.         ),
    129.     ),
    130. );
    131. $objPHPExcel->getActiveSheet()->getStyle("A4:AI{$i}")->applyFromArray($styleArray);
    132.  
    133. //Второй лист excel (здесь с датами все нормально)
    134.  
    135. $objPHPExcel->setActiveSheetIndex(1);
    136. $aSheet = $objPHPExcel->getActiveSheet();
    137.  
    138. $sql="SELECT * FROM lessons WHERE subject_id={$_POST['subject_id']} ORDER BY lesson_date";
    139. $res=mysql_query($sql);
    140. $i=2;
    141. while ($row=mysql_fetch_array($res)) {
    142. $i++;
    143. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 0, $i, $row['lesson_id']);
    144. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 1, $i, $row['lesson_order']);
    145. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 2, $i, $row['lesson_date']);
    146. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 3, $i, $row['topic'] );
    147. $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow( 4, $i, $row['dz']);
    148. }
    149.  
    150. //Стили границ таблицы
    151. $styleArray = array(
    152.     'borders' => array(
    153.         'allborders' => array(
    154.             'style' => PHPExcel_Style_Border::BORDER_THIN,
    155.         ),
    156.     ),
    157. );
    158. $objPHPExcel->getActiveSheet()->getStyle("A4:E{$i}")->applyFromArray($styleArray);
    159. $objPHPExcel->setActiveSheetIndex(0);
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    по сравнению с этим
    ваша текущая проблема это сущий пустяк
     
  3. homedj

    homedj Новичок

    С нами с:
    23 окт 2014
    Сообщения:
    3
    Симпатии:
    0
    Не спорю, там много косяков. Код не мой, достался таким, а времени все переделывать нет.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    и правда. времени ж нет. =)
     
  5. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    В вашей школе можно без особого труда стать отличником и медалистом :)
     
  6. homedj

    homedj Новичок

    С нами с:
    23 окт 2014
    Сообщения:
    3
    Симпатии:
    0
    Ладно, я понял, что тут все гуру. Только хоть кто-то бы по делу оставил ответ, а не указывал на очевидное
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Я тебя понял, дорогой.