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


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

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

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

MWF - 8:00 утра - 10:00 утра МВТ - 2:00 вечера - 3:00 вечера и т.д....

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

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

Должен ли я вводить их в миллисекундах или секундах? С "0", равным 12:00 утра в воскресенье?

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

Спасибо!

Author: Dodinas, 2009-09-02

1 answers

Прежде всего, 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 на любое время, которое вы там проверяете.

 3
Author: Eric, 2009-09-02 02:05:35