Kri*_*and 2 php mysql datetime pdo
我正在会议室预订系统上工作,无法确定会议室是否在设定的时间范围内占用,我在使用当前格式的日期并将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;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以在sql查询中执行此操作?
例如:A室在2016-03-31 15:00:00到2016-03-31 17: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
Run Code Online (Sandbox Code Playgroud)
如果没有在给定的时间跨度内预定房间,则将为您提供零行:dateStart-:dateEnd。
:dateStart BETWEEN date_start AND date_end将检查开始时是否已经预订了房间,:dateEnd BETWEEN date_start AND date_end将检查在结束时间是否已预订了房间,最后一个date_start BETWEEN :dateStart AND :dateEnd也很重要,它将检查房间是否在两者之间预定(例如,较短的时间)
编辑:或时间,没有与;)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |