我定义了员工工作时间,即工作时间,例如
$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:00
和end 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
语句以解决此问题?
答案 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小时])