我目前正在开发会议室预订系统,我无法检查时间范围是否已被占用。例如 9:00 - 11:00 已被占用,如果其他用户设置或输入 9:30 - 10:30 警报,则必须显示该时间已被占用,并且预订不会保存到数据库。
这个查询是我尝试过的,但它仅在输入的入时和出时具有相同值时才有效。
SELECT * FROM `reservation`
WHERE time_in = '$time_in' AND time_out = '$time_out' AND day = '$Fday' AND meeting_table = '$selected_radio'
Run Code Online (Sandbox Code Playgroud)
$time_in,$time_out,$Fday 是用户设置时间的选择框中的值。$selected_radio 是为其所需区域保留的选定无线电的值。
我的表“预订”如下所示:
id | emp_id | emp_name | month | day | year | meeting_table | time_in | time_out
1 | 23345 | name | 09 | 03 | 2019 | area 1 | 7:00 | 9:00
Run Code Online (Sandbox Code Playgroud)
您可以使用之间:
SELECT
*
FROM
reservation
WHERE
(
time_in BETWEEN ('$time_in' AND '$time_out') OR
time_out BETWEEN ('$time_in' AND '$time_out') OR
'$time_in' BETWEEN (time_in AND time_out) OR
'$time_out' BETWEEN (time_in AND time_out)
) AND
day = '$Fday' AND
meeting_table = '$selected_radio'
Run Code Online (Sandbox Code Playgroud)
此查询将遇到以下情况:
9:00 - 11:00 - 现有预订
08:00 - 09:30 - 占用
10:30 - 12:00 - 占用
10:30 - 12:00 - 占用
07:30 - 08:30 - 自由
11:30 - 12:30 - 自由
07:00 - 12 :00 - 被占领
我认为您应该保留8:00 - 8:59这样的时间段。如果有人尝试将时段安排在9:00 - 10:00 之间,则将其设置为 8:00 - 9:00会给您一个错误的“已占用” ,因为该时段将与先前预订的时间同时进行。time_intime_out
重要的!!! 事实上,您的代码容易受到 SQL 注入攻击!我建议使用 PDO 来修复它。PHP PDO 准备语句防止 SQL 注入的教程是关于如何使用它的很好的教程。
编辑:
在 WHERE 子句中添加了两个条件,以涵盖有人尝试在现有预订的开始时间和结束时间之间time_in安排时间段的情况。time_out
例如:
09:00 - 11:00 - 现有预订
10:00 - 10:30 - 占用