系统就是这样。导师提供他们的可用性(周一 - 周日)和他们当天可用的时间范围(0700 - 1400)(即:上午 7 点 - 下午 2 点)。
我试图找出存储和搜索这些信息以找到可用导师的最佳方法。只需要在每日系统上进行搜索(即:一周中的某一天 - 周一、周二、周三等)。
我计划的基础设施:
//Tutor Availability
---------------------------------------------------------------------------
tutorID | monday | tuesday | wednesday | thursday | friday |
---------------------------------------------------------------------------
27 | 0700-1200 | NULL | 1400-1800 | NULL | NULL |
---------------------------------------------------------------------------
35 | NULL | 1400-1600 | NULL | NULL | 1100-1900 |
//Scheduled tutor sessions
------------------------------------
tutorID | day | time |
------------------------------------
27 | monday | 0700-0900 |
------------------------------------
35 | friday | 1300-1500 |
查询:SELECT tutorid FROM tutoravailability WHERE 'monday'=
... 在 0900-1100 之间可用,并且不在预定的导师课程中。
我一直在寻找如何在 MySQL 中搜索(和存储)这些时间间隔。这是存储一天 24 小时的时间间隔的最佳方式吗?甚至可以在这些间隔之间进行搜索吗?我是从错误的方式接近这个吗?任何见解都值得赞赏。
更新的基础设施
//Tutor Availability
-----------------------------------------------------
tutorID | day | start_time | end_time | PK |
-----------------------------------------------------
27 | mon | 0700 | 1200 | 1 |
-----------------------------------------------------
27 | fri | 1400 | 1800 | 2 |
-----------------------------------------------------
35 | tue | 1100 | 1600 | 3 |
//Scheduled tutor sessions
--------------------------------------------------------
tutorID | day | start_time | end_time | PK |
--------------------------------------------------------
27 | mon | 0800 | 1000 | 1 |
--------------------------------------------------------
27 | fri | 1600 | 1800 | 2 |
因此,有了这个系统,搜索可用时间会简单得多。但是,我仍然不知道如何将可用性与预定课程进行比较以确保没有重叠。
SELECT tutorID
FROM tutoravailability WHERE day = 'fri'
AND start_time <= '1400'
AND end_time >= '1530'
现在我不明白如何将此查询与Scheduled tutor sessions
表进行比较以避免重复预订。
最终更新
为确保它们与已安排的导师课程不重叠,我将使用 MySQLBETWEEN
子句搜索开始和结束时间。