Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Расписание занятий в ВУЗе на PHP
 
 автор: NovikovMA   (16.06.2007 в 22:17)   письмо автору
 
 

Пишу сайт для университета и возникла проблема....

Как на Ваш взгляд будет лучше хранить расписание занятий?

Проблема собсно состоит в следующем:
1. Группа в университете может делиться на несколько подгрупп, причем не всегда, а только на некоторые предметы (например на некоторые лабораторные группу делят, чтобы меньше народа одновременно было на предмете)
2. У каждой ПОДгруппы (например в подельник первой парой) может быть одинаковый предмет как по всем неделям , так и разный по четным и нечетным неделям. А может быть еще хуже.... у одной подгруппы может быть по 1,4,7,13 неделям один предмет ,а по 2,3,5,8 и т.д. другой предмет... и тоже самое для другой подгруппы....

Причем есть список студентов в каждой группе, а в подгруппах - нет, т.е. надо написать общее расписание.... Например:
http://www.mpei.ru/AU/TimeTable/TableView.asp?auID=7450000008301
Вот тут в среду 3 и 4 пара именно такая ситуация....

Помогите кто чем может...

   
 
 автор: NovikovMA   (16.06.2007 в 23:26)   письмо автору
 
   для: NovikovMA   (16.06.2007 в 22:17)
 

Есть идеи?

   
 
 автор: Lotanaen   (16.06.2007 в 23:29)   письмо автору
 
   для: NovikovMA   (16.06.2007 в 23:26)
 

А подгрупп две или бывает и больше?

   
 
 автор: NovikovMA   (16.06.2007 в 23:43)   письмо автору
 
   для: Lotanaen   (16.06.2007 в 23:29)
 

вообще может быть и больше (до 4-х)

   
 
 автор: Гончий пёс   (17.06.2007 в 00:42)   письмо автору
 
   для: NovikovMA   (16.06.2007 в 23:43)
 

Таблицу, я думаю стоит организовать так:
id, name, order, date, subgroop, week
где
id - первичный ключ
name - название предмета
order - номер пары
date - дата
subgroop - подгруппа (0 - если для всех, и номер, если для одной)
week - неделя (odd - если нечетные, even - если четные недели или номера недель через точку с запятой)

Если при обращении к таблице на номер пары и дату приходится несколько записей (очевидная коллизия, если учитывать только одну подгруппу), то выводим их вместе.

И еще один момент. Для того, чтобы узнать какая неделя идет в данный момент нужно сделать следующее.
Очевидно, что та неделя, на которую приходится первое сентября, если это не воскресенье - первая. Для функции date есть потрясающий парметр "W" - номер недели (работает начиная с версии 4.1.0, но я думаю редко где можно найти более древнюю версию).
Далее привожу код для лучшей усвояемости информации

<?php
$year 
date("y");

if(
date("n") < 9//Если на дворе месяц меньший сентября, то говорим про прошлый год
{
$year--;
}

$first_time mktime(12,0,0,9,1,$year); //Определяем тайм-стамп для первого сентября (вычисляем для полудня дабы избежать коллизий неперехода на летнее время)

if (date("w"$first_time) == 0//Если этот день - воскресенье, придется накинуть еще денек
{
$first_time mktime(12,0,0,9,2,$year);
}

$first_week date("W"$first_time); //На эту неделю приходится 01.09
$this_week date("W");//Эта - текущая в году
$this_education_week $this_week $first_week//Текущая учебная

if($this_week $first_week//Если текущая недля меньше первой (т.е. время до сентября)
{
$delta 52 $first_week//Сколько недель проучились в том календарном году
$this_education_week $this_week $delta//Текущая учебная
}

echo 
"Первая неделя в этом году: $first_week -я<br>Текущая неделя года: $this_week-я<br>Текущая учебная неделя года: $this_education_week-я";
?>


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

Кстати, неделю для другого календарного но не учебного года, лишь с натяжкой можно назвать текущей "учебной" ибо неделя новогодних праздников явно выпадает, не говоря уже о каникулах.

Но в целом, пищу для размышлений, я надеюсь, дал.

   
 
 автор: Lotanaen   (17.06.2007 в 01:05)   письмо автору
 
   для: Гончий пёс   (17.06.2007 в 00:42)
 

Да, только еще добавить поле id_group в таблицу и сделать отдельную таблицу group в которой поля id ( или id_group), namegroup, fakultet. Если нужно расписание лично для каждого студента, то создать еще одну таблицу student с такими полями:
id_student, id_group, subgroop, name_student,secondname_student у и еще если надо то факультет и т.п. в зависимости от необходимости параметров выборки.

   
 
 автор: NovikovMA   (17.06.2007 в 11:24)   письмо автору
 
   для: Lotanaen   (17.06.2007 в 01:05)
 

Именно так я и делал, только тогда получается очень долго выводить данные....

Получается или надо делать по несколько запросов на одну пару или куча php кода с выбором, для какой же все таки это подгруппы и для каких недель....

Может быть есть что-нить по-интереснее?

   
 
 автор: NovikovMA   (17.06.2007 в 11:31)   письмо автору
 
   для: Гончий пёс   (17.06.2007 в 00:42)
 

Ой! Вот в чем дело! недели через точку с запятой!

А я копировал записи с разными номерами недель....
А зачем они мне нужны отдельно?
Мне же прям строку показывать.....

Это Хорошая Идея! Спасибо.

   
 
 автор: Киналь   (17.06.2007 в 00:30)   письмо автору
 
   для: NovikovMA   (16.06.2007 в 22:17)
 

Привет коллеге по альма-матер=)
А почему просто не сграбить расписание?
Если не грабить, то самый порстой вариант - это хранить в информацию о каждой ячейке таблицы, а заполнять ее вручную.
Можно извратиться и сделать так: представить, что ячеек вдвое больше, то есть у каждой подгруппы свое расписание. Хранить отдельно два расписания, а при выводе проверять: если ячейки совпадают, выводить общую для группы, если нет - то указывать каждую подгруппу.

ЗЫ: ЭР - РТФ?=)

   
 
 автор: NovikovMA   (17.06.2007 в 11:27)   письмо автору
 
   для: Киналь   (17.06.2007 в 00:30)
 

>>ЗЫ: ЭР - РТФ?=)
Ну почти... с ЭТФ


А что делать, если по разное расписание а разные недели? Тоже самое? Тогда получается, что может быть 40 ячеек на одну пару )))
Если каждую неделю разные предметы у 2-х подрупп ))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования