Скрипт планирования с PHP/MySQL - Помощь с логикой
Я собираюсь разработать небольшой скрипт, в который пользователи смогут вставлять свое "расписание". Однако мне нужна помощь в определении логики создания структуры БД и ввода "времени" событий в базе данных.
Однако следует отметить, что, когда пользователи вводят свое "расписание", они не будут вводить точные даты. Вместо этого они будут вводить "дни недели". Что-то вроде "повторяющейся" встречи.
Например, пользователь A может ввести следующий график работы:
MWF - 8:00 утра - 10:00 утра МВТ - 2:00 вечера - 3:00 вечера и т.д....
Как вы можете видеть, я ищу способ использовать общие "дни недели", не обязательно точные даты.
Имея это в виду, каков был бы наилучший способ сохранить это в базе данных, зная, что в конечном итоге я могу "запрашивать" базу данных для поиска доступного времени.
Должен ли я вводить их в миллисекундах или секундах? С "0", равным 12:00 утра в воскресенье?
Любой предложения были бы замечательными.
Спасибо!
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
на любое время, которое вы там проверяете.