Jump to content
Sign in to follow this  
maicon_m

Retornar intervalo entre datas

Recommended Posts

Bom dia,

 

Já fiquei dois dias em cima do problema com pesquisa e tentativas, porém não tem jeito de resolver.

 

Objetivo: retornar acomodações disponíveis no intervalo entre as datas incluíndo os dias nos extremos.

 

Campos na Tabela: data_inicio, data_fim - Tipo dos campos Date

 

Valores na Tabela: data_inicio (09/05/2016) - data_fim (11/05/2016)

 

Situação: cliente seleciona datas 09/05 e 10/05, deve retornar resultado já que esta entre o intervalo.

 

PHP:

list($dia, $mes, $ano) = explode('/', $entrada);
$chegada = ($ano.'-'.$mes.'-'.$dia);

list($dia, $mes, $ano) = explode('/', $saida);
$saida = ($ano.'-'.$mes.'-'.$dia);

 

SQL utilizada: ("SELECT * FROM promocoes LEFT JOIN acomodacoes ON acomodacoes.acomodacoes_id = promocoes.acomodacao WHERE ( promocoes.data_inicio >= '$chegada' ) AND (promocoes.data_fim <= '$saida' )")

 

O que tenho conseguido de retorno é se forem selecionadas as datas limites 09 e 11, porém não se selecionado o dia 10 em uma delas. Tentei converter de string para date, sem sucesso. Mas acho que o problema é esse, só não sei como resolver.

 

Desde já agradeço.

Share this post


Link to post
Share on other sites

Se você quer o período entre, os operadores estão invertidos...

...WHERE promocoes.data_inicio <= '$chegada' AND promocoes.data_fim >= '$saida'

Share this post


Link to post
Share on other sites

Se não me engano tem a clausula BETWEEN não é mais fácil?

Share this post


Link to post
Share on other sites

Olá ESerra, obrigado. Pois é, deu bug no cérebro e estava trocando os sinais de maior e menor.

 

Agora me deparo com outro problema: tenho datas entrada-saida como: 01/05 - 03/05 | 02/05 - 04/05 | 05/05 - 07/05

 

Se for selecionada a filtragem para datas com entrada em 01/05 e saída 08/05, não estão retornando os 3 registros acima, retorna nenhum.

Share this post


Link to post
Share on other sites

rpmarques, tentei com a BETWEEN, ele retorna o intervalo das 3 datas, mas não responde corretamente quando seleciono, por exemplo: 03/05 a 04/05, retorna nenhum.

 

Deveria ser algo simples, mas não entendo como está tão complicado...

Share this post


Link to post
Share on other sites

Olá ESerra, obrigado. Pois é, deu bug no cérebro e estava trocando os sinais de maior e menor.

 

Agora me deparo com outro problema: tenho datas entrada-saida como: 01/05 - 03/05 | 02/05 - 04/05 | 05/05 - 07/05

 

Se for selecionada a filtragem para datas com entrada em 01/05 e saída 08/05, não estão retornando os 3 registros acima, retorna nenhum.

E porque retornaria? Veja a sua query, você quer uma condição que x <= '' E y =>'', esta condição consulta linha a linha buscando que os dois casem.

Share this post


Link to post
Share on other sites

Bem observado ESerra, com base nisso tentei a seguinte query:

 

mysql_query("SELECT * FROM promocoes LEFT JOIN acomodacoes ON acomodacoes.acomodacoes_id = promocoes.acomodacao WHERE ((promocoes.data_inicio <= '$entrada' OR promocoes.data_inicio BETWEEN '$entrada' AND '$saida') AND (promocoes.data_fim >= '$saida')")

 

Ainda assim sem sucesso.

 

Penso que pode ser o tipo da variável, pois é string sendo que o campo é date...

Share this post


Link to post
Share on other sites

Amigo, só pra descargo de consciência, se tu pegares a query e executar direto no banco, o que retorna?
neste último post, se tu deixar somente o between, não te resolveria, pois dai traria todas as datas entre o intervalo, não é?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.