1

我定义了员工工作的时间,也就是工作时间,例如

$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 

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

4

2 回答 2

1

您可以使用 adatetime而不仅仅是 time 来完全避免这个问题。

或者您可以执行以下操作:

    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' ) )

基本上,当 start 在 end 之后发生时,您反转比较运算符。

于 2013-11-11T20:24:20.910 回答
0

如果你不能使用 adatetime你可以按摩你的价值观。

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

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

于 2013-11-11T20:35:55.127 回答