Reserva de Quarto

23/12/2009

1

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.
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
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))
)
Responder

06/01/2010

Carlos Júnior

Obrigado  a todos..   Funcionou perfeitamente,
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira