为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
烙印99 2021-12-24 09:49:47
我目前正在开发会议室预订系统,我在检查时间范围是否被占用时遇到问题。示例 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
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您可以使用之间:


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'

此查询将满足以下情况:

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


查看完整回答
反对 回复 2021-12-24
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

这是您的查询。CASTdatetime有工作之前,首先time

    SELECT * FROM `reservation`       
    WHERE 
     time_in >= cast('$time_in' as datetime) and time_out <= cast('$time_out' as datetime) 
       AND day = '$Fday' AND meeting_table = '$selected_radio'


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 745 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号