maicon_m 0 Denunciar post Postado Maio 4, 2016 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
ESerra 744 Denunciar post Postado Maio 4, 2016 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
rpmarques 3 Denunciar post Postado Maio 4, 2016 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
maicon_m 0 Denunciar post Postado Maio 4, 2016 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
maicon_m 0 Denunciar post Postado Maio 4, 2016 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
ESerra 744 Denunciar post Postado Maio 4, 2016 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
maicon_m 0 Denunciar post Postado Maio 4, 2016 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
rpmarques 3 Denunciar post Postado Maio 4, 2016 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