Сценарий планирования с помощью PHP/MySQL - Помощь с логикой

Я хочу разработать небольшой скрипт, в который пользователи могут вставлять свое «расписание». Однако мне нужна помощь в определении логики создания структуры БД и ввода «времени» событий в базу данных.

Однако следует отметить, что когда пользователи вводят свое «расписание», они не будут вводить точные даты. Вместо этого они будут вводить «дни недели». Что-то вроде «повторяющейся» встречи.

Например, пользователь А может ввести следующий график:

MWF - 8:00 - 10:00 MW - 14:00 - 15:00 и т.д...

Как видите, я ищу способ использовать общие «дни недели», а не обязательно точные даты.

Имея это в виду, как лучше всего сохранить это в базе данных, зная, что в конечном итоге я могу «запросить» базу данных для поиска доступного времени.

Должен ли я вводить их в миллисекундах или секундах? Где "0" означает 00:00 воскресенья?

Любые предложения были бы замечательными.

Спасибо!


person Dodinas    schedule 02.09.2009    source источник


Ответы (1)


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

Во всяком случае, для ваших таблиц (это для академического планирования, но применяются те же основные идеи):

DaysOfWeek
----------
DowID int
DayOfWeek varchar(10)

Users
------------------------
UserID int autoincrement
UserName varchar(50)
PassHash varbinary(100)
FirstName varchar(50)
LastName varchar(50)
DOB datetime

Semesters
----------------------------
SemesterID int autoincrement
SemesterName varchar(50)
SemesterNumber int
AcademicYear int
CalendarYear int

Classes
-------------------------
ClassID int autoincrement
ClassName varchar(50)
ClassCode varchar(25)

Schedule
----------------------------
ScheduleID int autoincrement
UserID int
SemesterID int
DowID int
ClassID int
BeginTime time
EndTime time

Теперь все, что вам нужно сделать, чтобы узнать, свободен ли кто-то в понедельник с 1 до 2, это:

select
    count(*) as classes
from
    schedule sch
    inner join users u on
        sch.userid = u.userid
    inner join semesters sem on
        sch.semesterid = sem.semesterid
where
    u.username = 'rmcdonald'
    and sem.academicyear = 2009
    and sem.semesternumber = 1
    and sch.dowid = dayofweek($mytime)
    and $mytime between sch.begintime and sch.endtime

Замените $mytime на любое время, которое вы там проверяете.

person Eric    schedule 02.09.2009
comment
Это здорово, Эрик. Бесконечно благодарен. - person Dodinas; 02.09.2009