Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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...

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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...

Compartilhar este post


Link para o post
Compartilhar em outros 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 é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.