Ir para conteúdo

POWERED BY:

Arquivado

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

rexona

Consulta com "range" de datas

Recommended Posts

Daew galera, eu tenho que construir uma agenda que o usuario tenha a opção de pesquisar todos os agendamentos da Data X até a Data Y ...

 

Estou usando PHP em conjunto com o MySQL para obter os dados e consulta-los , o problema que eu não tenho a mínima ideia de como fazer esse range ...

 

Se alguém poder me ajudar =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na sua query você faz assim:

$query = 'SELECT * FROM tabela WHERE data>="'.$_POST['data_inicio'].'" AND data<="'.$_POST['data_terminao'].'"'

Compartilhar este post


Link para o post
Compartilhar em outros sites

você ja fez alguma coisa ?

Dá algum erro ?

Poste.

 

 

Não eu não fiz nada , pois não sei por onde começar ....

 

 

Irei testar a solução proposta pelo Shrek ...

 

Eu não havia penssado na possibilidade de usar operadores junto a consulta ...

 

Valeu pela solução , irei testa-lo na aula de hoje !

 

 

Se alguém tiver outra solução ou dica deixe-as ai!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se sua data for datetime a solução do Sherek irá dar errado.

Qual o tipo de campo data ?

Se nao for DATETIME coloque. Eh sempre bom trabalhar com os campos correspondentes ao tipo. Se é data, entao DATETIME, se é texto, entao TEXT ou VARCHAR. Se é numero, entao NUMERIC, INT, ou INTEGER. E assim vai.

 

$sql = 'select * from tabela where data between convert(datetime,'.$_POST['data_inicio'].',103) and convert(datetime,'.$_POST['data_final'].',103)';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se sua data for datetime a solução do Sherek irá dar errado.

Qual o tipo de campo data ?

Se nao for DATETIME coloque. Eh sempre bom trabalhar com os campos correspondentes ao tipo. Se é data, entao DATETIME, se é texto, entao TEXT ou VARCHAR. Se é numero, entao NUMERIC, INT, ou INTEGER. E assim vai.

 

$sql = 'select * from tabela where data between convert(datetime,'.$_POST['data_inicio'].',103) and convert(datetime,'.$_POST['data_final'].',103)';

 

Pois é, ta dando problema :)

 

Eu estou com 3 campos no Banco de Dados :

 

DIA , MES e ANO ...

 

Os 3 são INT ... No php pra ficar com um designe descente eu utilizei 3 select, 1 para dia , 1 para mes e outro para ano ...

E fui jogar no select do Shreck , e ele nao ta filtrando ... Ai agora eu queria saber se tem como utilizar 1 campo só com DateTime e usar a verificação do shreck e sem desmanchar o meu SELECT ...

 

 

Eu penssei em uma solução que antes de inserir no campo DATETIME , eu concatenar as 3 variaveis ( dia/mes/ano ) em uma variavel só com o formato do DATETIME para ser aceito no banco, mais ai me surgiu um outro problema , como que eu irei Exibir elas separadamente na hora das consultas ...

 

Realmente ta fervendo meus neuronios EAUOHAEUOEHA

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal é que no banco o campo seja datetime. Se a sua tabela já estiver com os dados separados (dia,mes e ano) e você quiser alterar o campo para datetime, manda a descrição da sua tabela (DESC nome_tabela). Mas só se tiver com dados nela, caso não tenha é só você criar a tabela com um campo apenas datetime.

 

Para salvar no banco basta você concatenar as variáveis que você tem, por exemplo, porém, para salvar no MySql precisa ser aaaa-mm-dd:

   $data = $_POST['ano'].'-'.$_POST['mes'].'-'.$_POST['dia'];

Para você recuperar os dados no banco e exibí-los separadamente:

   $query1 = 'SELECT * FROM agenda WHERE xxxxx';
   $resultado1 = mysql_query($query1, $conexao);
   $item1 = mysql_fetch_array($resultado1);
   $dia = date('d',strtotime($item1['data']));
   $mes = date('m',strtotime($item1['data']));
   $ano = date('Y',strtotime($item1['data']));

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.