![](/img/trans.png)
[英]SQL Query to select rooms that do not have a booking associated with the input date
[英]SQL query to select all rooms from a table which still have free capacity in date range
我正在为旅馆开发预订系统。 每个房间内都有不同数量的床(room.capacity)。 例如,不同的预订可能共享一个带有三张床的单人间。 单个预订也有可能占用整个房间并容纳其容量,甚至可能占用不同房间的多张床。 这个想法不是在经典的酒店预订系统中以“每个房间”为基础进行预订,而是在我的系统中,所有工作均以“每床”为基础。 基本上,您在后端添加一个新房间并定义一个容量,而不是添加每张单人床。 不必知道谁拥有哪张床,而是知道哪个房间以及是否达到了容量限制,或者房间中是否还有剩余房间,这一点很重要。
我正在寻找一种方法,根据“客房预订”中的条目来选择所有客房及其容量+可用床位。
我尝试了一个小时的大型查询,例如:
SELECT room.id, room.name, room.room_category_id, room.status, room.capacity
FROM room
WHERE (SELECT COUNT(reservation_room.id)
FROM reservation_room
WHERE reservation_room.id = room.id) AND
WHERE (SELECT reservation.start, reservation.end
FROM reservation
WHERE NOT reservation.start > date$1 AND
NOT reservation.end < $date2
UNION
SELECT COUNT(id) AS beds_available
FROM reservation_room
WHERE reservation_room.id = room.id;
我认为这非常接近:
SELECT r.id, r.name, r.room_category_id, r.status, r.capacity, r.capacity - IFNULL(COUNT(res.id), 0) AS beds_available
FROM room AS r
LEFT JOIN reservation_room as rr ON rr.room_id = r.id
LEFT JOIN reservation as res
ON res.id = rr.reservation_id
AND @range_start < res.end
AND @range_end > res.start
GROUP BY r.id
唯一的问题是,在此期间,如果同一房间有两个不重叠的预订,这将使可用床数减少两次。 我不确定如何对所有预订进行排序,以便仅重叠的预订会增加床位使用量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.