用于在特定时间段内查找免费房间的SQL

问题描述 投票:1回答:1

我目前正在开展酒店预订服务,我希望在特定时间段内显示特定房型和酒店的所有免费房间。我发现似乎是一个有效的查询,直到我注意到:如果一个房间没有任何保留,它就不起作用。

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脚本,其中“$ from”是用户选择的预订日期开始,$ to是预订结束等。

即使房间没有预订,有没有办法让这个查询工作?任何帮助是极大的赞赏!

php sql
1个回答
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
                  );

注意:您应该在查询中使用值的参数,而不是使用查询字符串。

© www.soinside.com 2019 - 2024. All rights reserved.