使用PHP / MySQL调度脚本 - 帮助逻辑

时间:2009-09-02 01:47:22

标签: php mysql logic schedule

我正在寻找一个小脚本,用户可以在其中插入“计划”。但是,我需要一些帮助来确定如何创建数据库结构的逻辑以及如何在数据库中输入事件的“时间”。

然而,有一点需要注意的是,当用户输入他们的“时间表”时,他们将不会输入确切的日期。相反,他们将进入“一周中的几天”。有点像“经常性”约会。

例如,用户A可以输入以下时间表:

MWF - 上午8:00 - 上午10:00 MW - 下午2:00 - 下午3:00 等...

正如您所看到的,我正在寻找一种方法来使用通用的“一周中的日子”,而不一定是确切的日期。

考虑到这一点,将数据存储在数据库中的最佳方法是什么,因为最终我可能会“查询”数据库以搜索可用时间。

我应该在几毫秒或几秒内输入它们吗? “0”是星期日中午12:00吗?

任何建议都会很棒。

谢谢!

1 个答案:

答案 0 :(得分:3)

首先,MySQL包含time data type。我强烈建议你利用它。

无论如何,对于你的表(这是一个acadmic日程安排,但适用相同的基本想法):

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替换为您在那里检查的任何时间。