Reserva de Quarto
23/12/2009
0
Boa Tarde a Todos,
Estou fazendo essa consulta SQL para verificar se o quarto está reservado para a Data:
Select ID, NUMERO, DESCRICAO from QUARTOS QUA
WHERE NOT EXISTS
(SELECT 1 FROM RESERVAS WHERE (RESERVAS.ID_QUARTO=QUA.ID) AND ((DATA_ENTRADA between :qdataEntrada AND :qdataSaida) OR (DATA_SAIDA between :qdataEntrada AND :qdataSaida)))
Exemplo:
O Quarto 01 está reservado para o dia 01/01/2010 até o dia 05/01/2010
Se eu tentar reservar para o dia 31/12/2009 até o dia 04/01/2010 ele bloqueia: Certinho.
02/01/2010 até o dia 06/01/2010: ele bloqueia tb Certinho.
Agora se eu tentar: 02/01/2010 até o dia 04/01/2010 ele está passando...
Alguma coisa errada nessa minha consulta..
Alguem poderia me ajudar,
Aguardo.
Carlos Júnior
Curtir tópico
+ 0
Responder
Posts
04/01/2010
José Henrique
Amigo,
O teste a ser feito é o contrário. As datas de entrada e saída da nova reserva é que têm que ser verificadas se estão entre as data da reservas já existentes:
((qdataEntrada >= DATA_ENTR) AND (qdataEntrada =< DATA_SAIDA)) OR (qdataSaida >= DATA_ENTR) AND (qdataSaida =< DATA_SAIDA).
E este teste tem que ser feito em todas as reserva existente para um dado quarto (através de um loop, creio).
Responder
06/01/2010
Emerson Nascimento
o colega José Henrique está certo.
tente assim:
select ID, NUMERO, DESCRICAO
from QUARTOS QUA
where NOT EXISTS
(select 1
from RESERVAS
where (RESERVAS.ID_QUARTO=QUA.ID)
AND ((:qdataEntrada BETWEEN DATA_ENTRADA AND DATA_SAIDA) OR
(:qdataSaida BETWEEN DATA_ENTRADA AND DATA_SAIDA))
)
tente assim:
select ID, NUMERO, DESCRICAO
from QUARTOS QUA
where NOT EXISTS
(select 1
from RESERVAS
where (RESERVAS.ID_QUARTO=QUA.ID)
AND ((:qdataEntrada BETWEEN DATA_ENTRADA AND DATA_SAIDA) OR
(:qdataSaida BETWEEN DATA_ENTRADA AND DATA_SAIDA))
)
Responder
Clique aqui para fazer login e interagir na Comunidade :)