![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 12.05.2015
Сообщений: 15
|
![]()
Приветствую.
Есть бд, в ней таблицы - студенты, предметы, оценки. Оценки относятся к студентам (student_id) и предметам (subject_id) Нужно вывести таблицу, с такими строками и столбцами: 1)имя студента; 2) предмет , тип оценки, оценка, функции (редактировать, удалить). Причем, предмет должен выводиться не каждый по порядку, что есть в базе, а тот, по которому есть оценка у данного студента. В следующей таблице примерно описано как я представляю вывести такую задачу. Делаю таблицу с условиями вывода: Код HTML:
<table> <?php for($i = 0; $i < count(СТУДЕНТЫ); $i++) { ?> <tr> <td style="font-weight:bold;" colspan="4"><?=СТУДЕНТ[$i]["name]?></td> </tr> <tr> <td>Предмет</td> <td>Тип</td> <td>Оценки</td> <td>Функции</td> </tr> <?php for($j = 0; $j < count(ПРЕДМЕТЫ); $j ++) { ?> <?php for($o = 0; $o < count(ОЦЕНКИ); $o++) { ?> <?php if( (ОЦЕНКА[$o]["subject_id"] == ПРЕДМЕТ[$j]["id"] )) { ?> <tr> <td><?=ПРЕДМЕТ[$j]["title"]?></td> <td> <table> <tr class="type"><td>Лабораторные</td></tr> <tr class="type"><td>Расчетные</td></tr> <tr class="type"><td>Модуль</td></tr> </table> </td> <td>..... </td>.... </tr> <?php } ?> <?php } ?> <?php } ?> ....</tr> <?php } ?> </table> Нужно чтобы предмет у i-го студента выводился 1 раз, если по нему есть хотя бы 1 оценка с любых из 3х типов (лаба, модуль, расчетка). Подскажите, как можно исправить такую проблему? |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 23.05.2012
Сообщений: 34
|
![]() Код:
Как то так получится: Код:
Последний раз редактировалось Lucky beggar; 18.05.2015 в 20:15. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 12.05.2015
Сообщений: 15
|
![]() |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 12.05.2015
Сообщений: 15
|
![]()
Есть еще одна проблема с этой таблицей. Подскажите, как решить подобную ошибку в циклах ? :
Если у данного студента по данному предмету , есть любая оценка (лабораторная, расчетка или модуль), то выводится строка с этим предметом , и строки (<tr>) в которых столбцы с типами оценок (лабораторные, расчётки, модули) и рядом строки - в них столбцы (<td>) c оценками этого типа. Нужно чтобы оценка с типом лабы выводилась из БД, если она есть и принадлежит этому студенту и этому предмету, а иначе если оценок нет, то вывести : "<td>Оценок нет</td>". Таблица с оценками имеет такую структуру: - id, - subject_id (принадлежность к предмету), - student_id (принадлежность к студенту), - type (тип оценки, может иметь значение 'лабораторные', 'расчетки' или 'модули'), - values (строка с оценками). Как я пробовал ? Написал функцию, которая ищет в БД все оценки где `type` = 'лабораторные' , и дальше циклом прохожусь по всем записям и пишу условие: если оценка относится к этому студенту и данному предмету то вывожу значение оценок: "<td><?=$this->labs[$i]['values']?></td>" , а иначе вывожу "<td>Оценок нет</td>". Проблема в том, что если допустим в таблице с оценками, есть N записей с типом "лабораторные" и они не принадлежат данному студенту или данному предмету то "Оценок нет" и выводиться N раз. Если использовать break; или contnue; то выведеться 1 раз, но оценки не будут найдены, которые могут быть в [$i+1] или в [$i+2]-й (и т.д.) итерации. Ниже привожу код что есть, и скрин таблицы с ошибкой. Код:
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 23.05.2012
Сообщений: 34
|
![]()
Я правильно понимаю, если студент имеет 3 оценки, он занимает 3 строки в таблице? Если я Вас правильно понял, предлагаю изменить структуру. Для каждого типа оценки завести отдельный столбец (для студентов без оценки можно поставить, к примеру, 0). Это поможет структурировать немного инфу с таблиц , что , думаю, поможет решить Вашу проблему.
PS. Код:
|
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 12.05.2015
Сообщений: 15
|
![]() Цитата:
Для наглядности, код таблицы со всеми циклами и комментариями ниже: Код:
|
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 23.05.2012
Сообщений: 34
|
![]()
Кажется , я плохо изъяснился. Если студент имеет все 3 типа оценок , то ему в таблице в базе данных выделяется 3 строки ? Если да , то следуйте советам выше. Это позволит сократить код и избавиться от лишних циклов.
Создайте таблицу в бд со следующей структурой: - id, - subject_id (принадлежность к предмету), - student_id (принадлежность к студенту), - 'лабораторные', - 'расчетки', - 'модули', - values (строка с оценками). |
![]() |
![]() |
![]() |
#8 | ||
Пользователь
Регистрация: 12.05.2015
Сообщений: 15
|
![]() Цитата:
Цитата:
Допустим, нужно вытащить оценку за вторую лабораторную? Или за 3-тью по модулям, но там нет оценки. Как в таком случае выглядит поле 'values' ? |
||
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 23.05.2012
Сообщений: 34
|
![]()
Сори, не углядел когда копировал. Поле values надо убрать насовсем. А структуру оценок можно расширить (создать столбцы модуль1,...,модуль4 ; лаба1,...,лаба5 ; расчетка1,...,расчетка4). Думаю , такая структура подойдет
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как правильно записать условие С++ | Валера1984 | Помощь студентам | 1 | 25.02.2014 16:33 |
Как правильно записать условие выборки данных из структуры (нападающих из основного состава команды) ( на C ) | Валера1984 | Помощь студентам | 7 | 15.02.2014 13:34 |
Записать условие в виде одного оператора (Help) | kalugin19 | Паскаль, Turbo Pascal, PascalABC.NET | 14 | 22.11.2013 23:34 |
Как правильно записать условие | VP86 | Общие вопросы C/C++ | 7 | 17.09.2013 14:34 |