使用sql查询检查时间是否已被占用

Gel*_*xxx 0 php sql

我目前正在开发会议室预订系统,我无法检查时间范围是否已被占用。例如 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)

Cac*_*nde 5

您可以使用之间:

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 - 占用