猿问

使用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'

$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


烙印99
浏览 747回答 2
2回答

蓝山帝景

您可以使用之间:SELECT    *FROM    reservationWHERE    (        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'此查询将满足以下情况: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。使其8:00 - 9:00会给你一个虚假的“占领”,如果有人试图安排插槽9:00 - 10:00,为time_in将在相同的时间time_out的提前预约的。重要的!!! 就这样,您的代码容易受到 SQL 注入攻击!我建议使用 PDO 来修复它。PHP PDO Prepared Statements Tutorial to prevent SQL Injection是关于如何使用它的一个很好的教程。编辑: 增加了两个条件WHERE子句,以覆盖所述情况下,当有人试图调度时隙与time_in和time_out现有保留的开始和结束时间之间。例如:09 : 00 - 11:00 - 现有预订10:00 - 10:30 - 被占用

肥皂起泡泡

这是您的查询。CAST对datetime有工作之前,首先time。&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;`reservation`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_in&nbsp;>=&nbsp;cast('$time_in'&nbsp;as&nbsp;datetime)&nbsp;and&nbsp;time_out&nbsp;<=&nbsp;cast('$time_out'&nbsp;as&nbsp;datetime)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;day&nbsp;=&nbsp;'$Fday'&nbsp;AND&nbsp;meeting_table&nbsp;=&nbsp;'$selected_radio'
随时随地看视频慕课网APP
我要回答