使用mySQL查找今天的免费房间

时间:2011-09-27 11:24:12

标签: mysql sql

如果在mysql表中保留了RPOM_NUMBER,DATE_ARRIVAL和DATE_DEPARTED

如何找到今天所有可用的房间?

6 个答案:

答案 0 :(得分:2)

Select RPOM_NUMBER where current_date() not between DATE_ARRIVAL and DATE_DEPARTED;

这可能会对你有所帮助。如果您可以提供包含一些数据的详细信息表结构,那么将给出正确的答案。

答案 1 :(得分:2)

检查特定时刻可用的房间:

select RPOM_NUMBER
from RESERVATIONS r
group by RPOM_NUMBER
having not exists (
    select *
    from RESERVATIONS 
    where
       RPOM_NUMBER = r.RPOM_NUMBER and
       now() between DATE_ARRIVAL and DATE_DEPARTED
)

检查在指定时间段内可用的房间(从 start_time end_time ):

select RPOM_NUMBER
from RESERVATIONS r
group by RPOM_NUMBER
having not exists (
    select *
    from RESERVATIONS 
    where
       RPOM_NUMBER = r.RPOM_NUMBER and
       {start_time} <= DATE_DEPARTED and
       {end_time} >= DATE_ARRIVAL
)

答案 2 :(得分:1)

SELECT RPOM_NUMBER
FROM RESERVATIONS
WHERE (CURRENT_DATE() < DATE_ARRIVAL) OR (CURRENT_DATE() > DATE_DEPARTED)

编辑:回答有关插入表格的评论

您可以将上面的查询放在子查询中,然后使用INNER JOIN进行INSERT 子查询数据集返回的。

!没有测试下面的查询,只是为了表明一个想法:

INSERT INTO RESERVATIONS
SELECT available.RPOM_NUMBER, CURRENT_DATE(), CURRENT_DATE()
FROM RESERVATIONS r
INNER JOIN
 (SELECT RPOM_NUMBER
     FROM RESERVATIONS
     WHERE (CURRENT_DATE() < DATE_ARRIVAL) OR (CURRENT_DATE() > DATE_DEPARTED)
  ) available ON available.RPOM_NUMBER = r.RPOM_NUMBER

答案 3 :(得分:1)

SELECT RPOM_NUMBER
FROM RESERVATIONS
WHERE (DATE(NOW()) NOT BETWEEN DATE_ARRIVAL AND DATE_DEPARTED)

答案 4 :(得分:1)

您需要另一个表,可能名为rooms,其中包含该信息。该表格中的一行可能包含room_numberis_occupiedis_reservedreservation_start_timereserved_for_how_longreserved_by_whom等列。仅指房间的东西。

当你拥有reservations可以是一张好的,有用的桌子,顺便说一句)时,你很难判断一个房间是空的还是被占用的,部分是因为那里有没有关于客人是否实际出现并占据房间的栏目。

您可能还会考虑一个名为guests的表,其中包含每个来宾的所有信息。

答案 5 :(得分:0)

你真的需要一个ROOMS表来使这个数据库远程使用 - 还有一个RPOM_NUMBER(我假设它标识了一个单独的房间)。

如果您有这样的表格,那么此查询将立即免费提供RPOM_NUMBERS

SELECT RPOM_NUMBER FROM ROOMS WHERE RPOM_NUMBER NOT IN
(SELECT DISTINCT RPOM_NUMBER FROM RESERVATIONS WHERE 
 DATE_ARRIVAL < NOW() AND DATE_DEPARTED > NOW())

这会将一行插入RESERVATIONS

INSERT INTO RESERVATIONS (RPOM_NUMBER,DATE_ARRIVAL,DATE_DEPARTED) VALUES
 (x, y, z)

(其中xyz分别是RPOM_NUMBERDATE_ARRIVALDATE_DEPARTED

这不允许特定的时间。您需要考虑何时希望房间显示为免费。 如果从出发时间起1分钟,它是免费的吗?还是正在清理?

这也假设预订将在插入时同时具有到达和离开日期。 您如何处理开放式住宿的客人?

这个SQL没有经过测试,也不确定它是否可以在mySQL中运行 - 但它会非常相似。