【问题标题】:Scheduling Script with PHP/MySQL - Help with Logic使用 PHP/MySQL 调度脚本 - 逻辑帮助
【发布时间】:2009-09-02 01:47:22
【问题描述】:

我希望开发一个小脚本,用户可以在其中插入他们的“时间表”。但是,我需要一些帮助来确定如何创建数据库结构的逻辑以及如何在数据库中输入事件的“时间”。

但是,需要注意的一点是,当用户输入他们的“时间表”时,他们不会输入确切的日期。相反,他们将输入“星期几”。有点像“定期”约会。

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

MWF - 上午 8:00 - 上午 10:00 兆瓦 - 下午 2:00 - 下午 3:00 等等……

如您所见,我正在寻找一种使用通用“星期几”的方法,不一定是确切的日期。

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

我应该以毫秒还是秒为单位输入它们?周日凌晨 12:00 表示“0”?

任何建议都会很棒。

谢谢!

【问题讨论】:

    标签: php mysql logic schedule


    【解决方案1】:

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

    无论如何,对于您的桌子(这是用于学术日程安排,但同样的基本想法适用):

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

    【讨论】:

    • 太好了,埃里克。谢谢一百万。
    猜你喜欢
    • 2023-03-08
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多