Ir para conteúdo

POWERED BY:

Arquivado

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

joao vitor

busca por intervalo de datas

Recommended Posts

Pessoal estou com a seguinte dúvida cruel.

 

estou desenvolvendo um sistema para um hotel e nao estou conseguindo fazer a busca por data para saber se o quarto está livre. por exemplo:

 

tenho o quarto 100 ocupado do dia 05-12-2009 até 10-12-2009, cada data está em um campo (dataInicial) e (dataFinal). Eu queria saber como realizar a pesquisa no banco de dados para saber o quarto está livre ou não.

 

ajudemmmmmmmmmmmmmmmmmmmmm valewwwwwwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode fazer assim:

 

SELECT * FROM reservas WHERE id_quarto = 100 AND NOW() BETWEEN dataInicial AND dataFinal

 

ou seja:

SELECIONA tudo DA TABELA reservas ONDE id_quarto É IGUAL A 100 E NESTE MOMENTO ESTÁ ENTRE dataInicial E dataFinal

 

Se retornar 1, o quarto está reservado.

 

Se retornar 0, o quarto está livre hoje.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá joao vitor tudo bem?

 

Conforme a pergunta do nosso amigo Weudes

Os seus campos de data estao em que formato no BD? date, string?

Vamos supor que você esteje utilzando o formato date em seus respectivos campos de datas...caso não tiver...coloque rsss http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gif .

Acho que isso aki te ajudaria um pouco... veja

 

Mas...vamos lá...

 

$dataInicial = '01/12/2009';
$datafinal   = '31/12/2009';

$sql = "SELECT 'quartos'  FROM 'apartamento' 
                  WHERE 'data' BETWEEN '".$dataInicial."' and '".$datafinal."' and status = 1";

Sacou??? Não???

 

Bom...é o seguinte...

Na SQL do exemplo aí...irá buscar dados do campo quarto da tabela apartamento onde o campo data varia entre $dataInicial e $datafinal e o status seja igual a 1. O valor 1 significa que o mesmo (quarto) está disponivel, para reservado, coloque o valor 2.

 

Lembrando que...talvez você terá que inverter as datas...de 01/12/2009 para 2009/12/01.

No próprio php já existem funções prontas para isso,como por exemplo:

$data = implode("/", array_reverse(explode("/", substr($dataInicial , 0, 10)))).substr($dataInicial , 10);

Ou você pode criar uma função própria tipo como:

 

 

public function inverterDatas($data){

  $data = explode("/",$data);
  $dia = $data[0];
  $mes = $data[1];
  $ano = $data[3];

  $novaData = $ano."/".$mes."/".$dia;
}

$data = '01/12/2009';

$novaData = $this->inverterDatas($data);
 echo "<br>A saida será : $novaData";

 

Bom...espero ter-lhe ajudado em seu problema aí...

Teste os exemplos acima (inclusive o do do nosso amigo lucasmartins.com.br)...caso ainda tenha dúvidas...poste a forma como estiver fazendo para que possamos te ajudar melhor ok. http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

 

Abraços e boa sorte!!! http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera,

 

como sempre eu devo elogiar este fórum. Obrigado a todos. Mas vamos no problema o Between só checa um campo a "dataDeEntrada" mas eu tenho dois campos "dataEntrada" e "DataSaida" pq preciso registrar o dia que a pessoa entra e o dia que a pessoa sai? o que me dizem? os codigos acima funcionam para um campo só perfeitamente, mas eu tenho dois....como faço????????????

 

 

valewwwwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom acredito que voce nao conseguiu entender o exemplo de nosso amigo Roberto, o mesmo funciona perfeitamento para seu problema. Vamos tentar esclarecer!

 

Conforme o exemplo do Roberto

$dataInicial = $dataChegada;
$datafinal   = $possivelSaida;

$sql = "SELECT 'quartos'  FROM 'apartamento' 
                  WHERE 'data' BETWEEN '".$dataInicial."' and '".$datafinal."' and status = 1 and num_ap = 100";

Analisando o codigo,

 

a variavel $dataInicial recebe o valor de data de entrada do seu hospede e a variavel $datafinal recebe o valor da data de saida do seu hospede.

Levamos em conta que o hospede que voce hospedou no apartamento 100 nao sabe ate que dia ira ocupar o mesmo, logo voce tera que entender que este quarto esta ocupado por tempo indefinido, ou seja, nao disponivel(2).

O sql mostrado faz entao o que voce deseja, ele seleciona o campo cujo numero de apartamento seja = 100 e que esteja disponivel cod(1) entre as datas desejas pelo novo hospede.

 

Espero ter entendido,

 

Abracos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera,

 

como sempre eu devo elogiar este fórum. Obrigado a todos. Mas vamos no problema o Between só checa um campo a "dataDeEntrada" mas eu tenho dois campos "dataEntrada" e "DataSaida" pq preciso registrar o dia que a pessoa entra e o dia que a pessoa sai? o que me dizem? os codigos acima funcionam para um campo só perfeitamente, mas eu tenho dois....como faço????????????

 

 

valewwwwww

 

Como eu fiz não deu certo??? http://forum.imasters.com.br/public/style_emoticons/default/natal_ohmy.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Galera,

 

como sempre eu devo elogiar este fórum. Obrigado a todos. Mas vamos no problema o Between só checa um campo a "dataDeEntrada" mas eu tenho dois campos "dataEntrada" e "DataSaida" pq preciso registrar o dia que a pessoa entra e o dia que a pessoa sai? o que me dizem? os codigos acima funcionam para um campo só perfeitamente, mas eu tenho dois....como faço????????????

 

 

valewwwwww

 

Como eu fiz não deu certo??? http://forum.imasters.com.br/public/style_emoticons/default/natal_ohmy.gif

 

hahaha tb nao sei como http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gif http://forum.imasters.com.br/public/style_emoticons/default/natal_dry.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, vendo melhor, o meu jeito irá verificar se o quarto está livre para hoje... mas não se estará livre em um período de tempo...

 

Mas é só fazer uma modificação no meu select:

 

 

SELECT * FROM reservas WHERE id_quarto = 100 AND (($dataInicialDesejada BETWEEN dataInicial AND dataFinal) OR ($dataFinalDesejada BETWEEN dataInicial AND dataFinal))

 

Se ele retornar alguma coisa, quer dizer que o período desejado pelo cliente não está livre...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como a sua dúvida é para gerar a consulta, vou mover para o fórum correto.

 

Tópico Movido

PHP http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites

select r.quarto, c.dia from reservas r,

(

select (@dia:=@dia + INTERVAL 1 DAY) dia from

(select @dia:=date(now()))dia, (select 'x' from information_schema.collations a,information_schema.collations b,information_schema.collations c)apoio

limit 180

)c

where c.dia not between r.entrada and r.saida

and quarto = 100

 

essa query mostra todos os dias livres do quarto 100 nos proximos 180 dias

(afinal de contas o cliente nao eh corno pra ficar tentando combinaçoes de data :P )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, aproveitando o post acima tenho uma duvida que se relaciona bem e que eu não consegui desenvolver.

Vejam se vocês podem me ajudar.

 

Fiz uma form que traz o balanço geral das contas bancárias e gastos (cash flow), o cliente me pediu para que nos totais de cada plano de contas contenha o saldo anterior.

Tentei aproveitar os exemplos acima mas não consegui, estou tendo dificuldades para selecionar o intervalo de data.

Então segue o que eu preciso fazer:

 

Tenho uma tabela chamada Transactions (Onde tem toda a transação entre contas), nesta tabela tenho os campo Data (date) e o campo amount (valores de todos os debitos e créditos), que são os campos que preciso usar.

 

Preciso mostrar a soma do mês anterior ao que está atualmente, e é ai que eu estou me enrolando todo.

Tenho que fazer o sistema entender a data atual, voltar no mês anterior e fazer a soma dele todo, (Lembrando que tem meses de 31 dias, 30 dias e 28 dias(fevereiro)), como posso fazer isso?

 

Aguardo ajuda de vocês!

Muito Obrigado.

 

 

 

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.