检查预约时间是否适合用户使用SQL的工作时间 - 夜间提示错误

时间:2013-11-11 20:17:11

标签: php mysql sql where

我定义了员工工作时间,即工作时间,例如

$start = "09:00:00";
$end = "18:00:00";

用户现在可以选择约会,查询应该对其进行验证,例如

$appointment_start = "09:00:00";
$appointment_end = "10:00:00";

我的SQL查询现在应检查员工是否在该特定时间工作。如果是这种情况,请向用户提出此约会。我就是这样做的:

...
AND w.start <= '$appointment_start' 
AND w.end >= '$appointment_end';

在白天变化的夜晚似乎有问题,例如何时start is 23:00:00end is 00:30:00。这不应该是有效的约会时间,但我的查询建议:

start substr: 23:00:00 || end substr: 00:00:00 
start substr: 23:30:00 || end substr: 00:30:00 

如何更改SQL查询的WHERE语句以解决此问题?

2 个答案:

答案 0 :(得分:0)

您可以使用datetime而不仅仅是时间来完全避免此问题。

或者你可以这样做:

    AND (( w.start < w.end
           AND w.start <= '$appointment_start'
           AND w.end >= '$appointment_end') OR
         ( w.start > w.end
           AND w.start >= '$appointment_start'
           AND w.end <= '$appointment_end' ) )

基本上,在结束后开始发生时,您会反转比较运算符。

答案 1 :(得分:0)

如果您无法使用datetime,可以按摩您的价值观。

$appointment_end = ($appointment_end < $appointment_start) ? $appointment_end + [24hours] : $appointment_end;
$end  = ($end  < $start) ? $end  + [24hours] : $end;

基本上,如果结束时间小于开始时间,则假设它是第二天并添加24小时,然后正常进行检查。 (不确定php中的语法添加[24小时])