我正在为旅馆开发预订系统。每个房间内都有不同数量的床(room.capacity)。例如,不同的预订可能共用一个带三张床的房间。单个预订也可能占用整个房间并且容量很大,甚至可以从不同房间占用多张床。这个想法是,而不是在一个经典的酒店预订系统,你在“每个房间”的基础上预订,在我的系统中,所有工作都在“每床”的基础上。基本上在后端你添加一个新房间并定义容量,而不是添加每张单人床。它没有必要知道谁有哪个床,但重要的是要知道哪个房间,是否达到容量限制或房间是否还有房间。
我正在寻找一种方法来选择所有房间的容量+可用床位,具体取决于reservation_room中的条目。
我尝试了几个小时的大量查询,如:
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;
答案 0 :(得分:0)
我认为这非常接近:
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
唯一的问题是如果在此期间同一房间有两个不重叠的预订,它将减少两次可用床位。我不确定如何对所有预订进行排序,以便只有重叠预订会增加床位使用次数。