Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过时间间隔进行MySQL搜索_Php_Mysql - Fatal编程技术网

Php 通过时间间隔进行MySQL搜索

Php 通过时间间隔进行MySQL搜索,php,mysql,Php,Mysql,这个系统就是这样。导师提供周一至周日的可用时间,以及当天0700-1400(即:上午7点至下午2点)的可用时间 我正试图找出存储和搜索这些信息的最佳方式,以找到可用的导师。搜索只需要在每日系统上完成,即:星期一、星期二、星期三等 我计划的基础设施: //Tutor Availability --------------------------------------------------------------------------- tutorID | monday | tu

这个系统就是这样。导师提供周一至周日的可用时间,以及当天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 |
查询:从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子句来确保在预订时不会出现重叠。谢谢