我目前正在从事酒店预订服务,我希望在特定时间段内显示特定房型和酒店的所有免费房间。 直到我注意到:如果一个房间没有任何保留,它就不起作用,我发现了一个似乎是一个有效的查询。
SELECT DISTINCT r.id,
r.num,
r.NAME,
h.NAME,
h.city,
h.country
FROM room r
JOIN hotel h
ON r.hotel_id = h.id
JOIN room_type rt
ON r.room_type_id = rt.id
WHERE r.id NOT IN (SELECT room_id
FROM reservation
WHERE ( '$from' BETWEEN start_date AND end_date )
OR ( start_date BETWEEN '$from' AND '$to' )
OR '$from' = start_date)
AND $roomtype = rt.id
AND $hotel = h.id
此查询将用于PHP脚本,其中" $来自"是用户选择的预订日期开始,$ to是预订结束等。
即使房间没有预订,有没有办法让这个查询工作? 非常感谢任何帮助!
答案 0 :(得分:1)
非免费房间的逻辑是:
有一个非免费的房间。让我们将此逻辑应用于您的查询:
SELECT r.id, r.num, r.name, h.name, h.city, h.country
FROM room r JOIN
hotel h
ON r.hotel_id = h.id JOIN
room_type rt
ON r.room_type_id = rt.id
WHERE rt.id = $roomtype AND
h.id = $hotel AND
r.id NOT IN (SELECT res.room_id
FROM reservation res
WHERE '$from' <= end_date AND
'$to' >= start_date AND
);
注意:您应该在查询中使用值的参数,而不是使用查询字符串。