gpt4 book ai didi

php - 如何检查时间范围内是否存在预订?

转载 作者:行者123 更新时间:2023-11-29 01:27:18 24 4
gpt4 key购买 nike

我正在开发 session 室预订系统,但我无法确定房间是否在设定的时间范围内被占用,我正在使用当前的日期格式并将类型设置为 DATETIME在表中:YYYY-MM-DD HH:II:SS

这是我当前的代码:

//Function to check if a booking exists:
function bookingExist($DateStart, $DateEnd, $RoomNo) {
global $DB;

$sql = "SELECT * FROM bookings WHERE date_start = :dateStart AND date_end = :dateEnd AND room_no = :roomNo";
$Q = $DB->prepare($sql);
$Q->bindParam(':dateStart', $DateStart);
$Q->bindParam(':dateEnd', $DateEnd);
$Q->bindParam(':roomNo', $RoomNo);
$Q->execute();

if ($Q->rowCount()) {
//A record exists...
return true;
} else {
//no record exists
return false;
}
}

有什么办法可以在 sql 查询中做到这一点吗?

示例:房间 A 在 2016-03-31 15:00:00 和 2016-03-31 17:30:00 之间被预订,然后用户尝试为房间 A 创建 2016-03-31 16 的新预订: 30:00 - 2016-03-31 17:00:00 应该返回 1 条记录,因为有预订

最佳答案

SELECT *
FROM bookings
WHERE
(
:dateStart BETWEEN date_start AND date_end
OR :dateEnd BETWEEN date_start AND date_end
OR date_start BETWEEN :dateStart AND :dateEnd
)
AND room_no = :roomNo

如果在您给定的时间跨度内没有预订房间,这将为您提供零行:dateStart - :dateEnd。 :dateStart BETWEEN date_start AND date_end将检查它是否已经在开始时间预订,:dateEnd BETWEEN date_start AND date_end将检查它是否在结束时间和最后一个时间预订 date_start BETWEEN :dateStart AND :dateEnd也很重要,它会检查房间是否已预订(例如较短的时间)

编辑:OR 次,没有 AND ;)

EDIT2:要排除开始和结束时间,您必须扩展 BETWEEN关键字并使关系仅为 < :

SELECT *
FROM bookings
WHERE
(
(date_start < :dateStart AND :dateStart < date_end)
OR (date_start < :dateEnd AND :dateEnd < date_end)
OR (:dateStart < date_start AND date_start < :dateEnd)
)
AND room_no = :roomNo

关于php - 如何检查时间范围内是否存在预订?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com