Php 通过时间间隔进行MySQL搜索
这个系统就是这样。导师提供周一至周日的可用时间,以及当天0700-1400(即:上午7点至下午2点)的可用时间 我正试图找出存储和搜索这些信息的最佳方式,以找到可用的导师。搜索只需要在每日系统上完成,即:星期一、星期二、星期三等 我计划的基础设施:Php 通过时间间隔进行MySQL搜索,php,mysql,Php,Mysql,这个系统就是这样。导师提供周一至周日的可用时间,以及当天0700-1400(即:上午7点至下午2点)的可用时间 我正试图找出存储和搜索这些信息的最佳方式,以找到可用的导师。搜索只需要在每日系统上完成,即:星期一、星期二、星期三等 我计划的基础设施: //Tutor Availability --------------------------------------------------------------------------- tutorID | monday | tu
//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 |
查询:从tutoravailability中选择教程,其中“星期一”=。。。在0900-1100之间可用,不在计划的导师课程中
我一直在搜索如何在MySQL中搜索和存储这些时间间隔。这是存储一天24小时的时间间隔的最佳方法吗?甚至可以在这些间隔之间进行搜索吗?我是不是走错了路?任何见解都值得赞赏
更新的基础设施
因此,使用此系统,搜索可用时间会简单得多。但是,我仍然不知道如何将可用性与计划课程进行比较,以确保没有重叠
SELECT tutorID
FROM tutoravailability WHERE day = 'fri'
AND start_time <= '1400'
AND end_time >= '1530'
现在我不明白如何将此查询与计划的导师课程表进行比较,以避免重复预订
最后更新
为了确保它们与计划的导师课程没有重叠,我将使用MySQL-BETWEEN子句来搜索开始时间和结束时间。如果使用两列存储时间间隔,则使用sql查询执行搜索会容易得多
i、 e.tutorID、day、startTime、endTime如果使用两列存储时间间隔,则使用sql查询执行搜索会容易得多
i、 e.教程、日期、开始时间、结束时间您可以使用位标志指示24位可用性和24位计划时间。然后,您可以使用24位来表示每天的可用小时数和计划小时数 在导师可用性表中,假设“1”代表中可用,“0”代表不可用。在计划表中,“0”表示已计划,“1”表示未计划 因此可用间隔0900-1100可存储为POW2,9 | POW2,10 | POW2,11;计划的1000-1200可存储为^POW2,10 | POW2,12 然后,以下查询可以为您提供周一上午9点至上午11点的在线辅导:
SELECT ta.tutorid FROM tutoravailability ta, tutorscheduled ts
WHERE ta.tutorid = ts.tutorid AND ts.day = 'monday'
AND (ta.monday & ts.time & (POW(2,9) | POW(2,10) | POW(2,11))) = (POW(2,9) | POW(2,10) | POW(2,11))
您可以使用位标志指示24位可用性和24位计划时间。然后,您可以使用24位来表示每天的可用小时数和计划小时数 在导师可用性表中,假设“1”代表中可用,“0”代表不可用。在计划表中,“0”表示已计划,“1”表示未计划 因此可用间隔0900-1100可存储为POW2,9 | POW2,10 | POW2,11;计划的1000-1200可存储为^POW2,10 | POW2,12 然后,以下查询可以为您提供周一上午9点至上午11点的在线辅导:
SELECT ta.tutorid FROM tutoravailability ta, tutorscheduled ts
WHERE ta.tutorid = ts.tutorid AND ts.day = 'monday'
AND (ta.monday & ts.time & (POW(2,9) | POW(2,10) | POW(2,11))) = (POW(2,9) | POW(2,10) | POW(2,11))
这显然是正确的解决办法。但我补充了这个问题,因为我不明白在找到与原始请求匹配的教程后,如何将可用性与计划会话进行比较。您可以在计划会话表上执行另一个sql,以确保没有重叠。如果您只需要每天在后端运行作业,则不一定要在单个SQL中完成所有操作。我将使用MySQL BEVERY子句来确保在预订时不会出现重叠。谢谢。这显然是正确的解决方案。但我补充了这个问题,因为我不明白在找到与原始请求匹配的教程后,如何将可用性与计划会话进行比较。您可以在计划会话表上执行另一个sql,以确保没有重叠。如果您只需要每天在后端运行作业,则不一定要在单个SQL中完成所有操作。我将使用MySQL BEVERY子句来确保在预订时不会出现重叠。谢谢