Fórum Ajuda em query SQL #478236
07/05/2014
0
[img]http://arquivo.devmedia.com.br/forum/imagem/369526-20140507-145203.png[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/369526-20140507-145228.png[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/369526-20140507-145238.png[/img]
Estou realizando o projeto no Delphi e preciso realizar uma filtragem para que na hora de cadastrar uma nova hospedagem ou reserva me retorne apenas os quartos que estejam disponíveis para as datas escolhidas na hora do cadastro. Tinha pensado em fazer algo como isso, mas não deu certo e estou meio perdido:
select * from quartos as q left join reservas as r on q.numeroquartos=r.quartos_numeroquartos left join hospedagem as h on q.numeroquartos=h.quartos_numeroquartos where ((r.dataentradareservas not between '14.04.2014' and '30.04.2014' and r.datasaidareservas not between '14.04.2015' and '30.04.2015') or (r.quartos_numeroquartos is null)) and (h.quartos_numeroquartos is null)
Esse “14/04/2014” seria a data de entrada e esse “30/04/2014” seria a data de saída, escolhidos pelo cliente para a hospedagem, por exemplo.
Acho que disse todas as informações, mas se faltou algo relevante me peçam que eu informo.
Se alguém puder me ajudar em como eu posso fazer minha query agradeço desde já.
Alex Welter
Curtir tópico
+ 0Posts
08/05/2014
Emerson Nascimento
select q.*
from quartos q
left join reservas r on
r.quartos_numeroquartos=q.numeroquartos and
(('14.04.2014' between r.dataentradareservas and r.datasaidareservas) or ('30.04.2014' between r.dataentradareservas and r.datasaidareservas))
left join hospedagem h on
h.quartos_numeroquartos=q.numeroquartos and
((h.datasaidahospedagem is null) or
('14.04.2014' between h.dataentradahospedagem and h.datasaidahospedagem) or
('30.04.2015' between h.dataentradahospedagem and h.datasaidahospedagem))
where
r.quartos_numeroquartos is null and
h.quartos_numeroquartos is null
Gostei + 0
08/05/2014
Alex Welter
Por exemplo
Datas escolhidas: 01.03.2014 e 25.04.2014
Quartos indisponíveis:
dataentradahospedagem 27.02 e datasaidahospedagem 05.04
dataentradareservas 20.04 e datasaidareservas 05.05
Quartos disponíveis:
dataentradahospedagem 23.03 e datasaidahospedagem 28.03
Gostei + 0
08/05/2014
Emerson Nascimento
nos testes que eu fiz deu tudo certo, porém fiz com apenas 3 registros.
Gostei + 0
08/05/2014
Emerson Nascimento
select q.*
from quartos q
left join reservas r on
r.quartos_numeroquartos=q.numeroquartos and
(('14.04.2014' between r.dataentradareservas and r.datasaidareservas) or
('30.04.2014' between r.dataentradareservas and r.datasaidareservas) or
(r.dataentradareservas between '14.04.2014' and '30.04.2014') or
(r.datasaidareservas between '14.04.2014' and '30.04.2014'))
left join hospedagem h on
h.quartos_numeroquartos=q.numeroquartos and
((h.datasaidahospedagem is null) or
('14.04.2014' between h.dataentradahospedagem and h.datasaidahospedagem) or
('30.04.2015' between h.dataentradahospedagem and h.datasaidahospedagem) or
(h.dataentradahospedagem between '14.04.2014' and '30.04.2014') or
(h.datasaidahospedagem between '14.04.2014' and '30.04.2014'))
where
r.quartos_numeroquartos is null and
h.quartos_numeroquartos is null
Gostei + 0
09/05/2014
Alex Welter
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)