Ir para conteúdo

POWERED BY:

Arquivado

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

fabio.aurelio

Consulta com intervalo de datas

Recommended Posts

Pessoal, blz?

 

Eu tenho um form com 2 campos(data inicial, data final), a pessoal escolhe o intervalo que ela quer, e quando executo ele vai pra uma lista de registros deste intervalo, tentei construir uns 3 codigos, mas ou ele mostra tudo ou nada..

 

a linha do select esta assim:

SELECT *FROM tabela where produto='$produto' BETWEEN '".$datainicial."' and '".$datafinal."' 

 

Esse trecho acima mostra tudo.

 

Na minha tabela so tenho 01 campo chamado data entao, não estou sabendo como comparar este campo com estes outros ai de cima que vem no form para fazer o filtro do intervalo das datas.

 

Vcs tem alguma ideia disso?

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, blz?

 

Eu tenho um form com 2 campos(data inicial, data final), a pessoal escolhe o intervalo que ela quer, e quando executo ele vai pra uma lista de registros deste intervalo, tentei construir uns 3 codigos, mas ou ele mostra tudo ou nada..

 

a linha do select esta assim:

SELECT *FROM tabela where produto='$produto' BETWEEN '".$datainicial."' and '".$datafinal."' 

 

Esse trecho acima mostra tudo.

 

Na minha tabela so tenho 01 campo chamado data entao, não estou sabendo como comparar este campo com estes outros ai de cima que vem no form para fazer o filtro do intervalo das datas.

 

Vcs tem alguma ideia disso?

 

abraço

 

 

fabio primeiro o seu codigo mysql deve ficar assim

 

SELECT * FROM tabela WHERE produto='$produto' AND data BETWEEN  '$datainicial' AND '$datafinal'

 

segundo a data deve estar no formato do mysql geralmente no formato americano

AAAA/MM/DD

 

E tambem o campo data deve estar definido no formato DATE, DATETIME ou TIMESTAMPS.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fabio primeiro o seu codigo mysql deve ficar assim

 

SELECT * FROM tabela WHERE produto='$produto' AND data BETWEEN  '$datainicial' AND '$datafinal'

 

segundo a data deve estar no formato do mysql geralmente no formato americano

AAAA/MM/DD

 

E tambem o campo data deve estar definido no formato DATE, DATETIME ou TIMESTAMPS.

 

Fala Ricado, blz?

 

Então, ai eu tenho um problema, pois meu campo esta definido como VARCHAR no banco(mysql), e todas as datas ja estao gravadas no formato: dd/mm/yyyy! existe algum meio que eu consiga fazer este filtro sem ter que alterar a estrutura do meu banco?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim brother usando função SQL eu não sei se haveria uma forma de fazer isso.

Mais daria sei la pra fazer com while ou for fazendo varias consultas no banco, mais só que não te aconselho a fazer isso.

Acho que a melhor coisa que você tem a fazer é mexer na estrutura do banco de dados.

 

Assim uma dica que de dou é fazer o seguinte criar uma outra tabela igual a que você com só com o campos data no formato correto DATE.

E pegar em fazer um script que pegue as informações do banco de dados antigo e passe para o novo já formatando a data para o padrão do mysql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um problema que pode ser resolvido, principalmente quando já há um banco de dados com formatação inadequada.

 

Nesse caso, nunca se pode pensar no mais drástico, que seria modificar o banco de dados inteiro, e sim numa solução funcional.

 

Para o que você quer, utilize esse código:

 

 

<?php 

$datainicial = '12/01/2013'; //modifique pra receber o valor digitado 
$datafinal = '11/04/2013';  //modifique pra receber o valor digitado


//modifica para o formato aceito para a aplicação do BETWEEN
$di = explode('/', $datainicial);
$datainicial = "$di[2]-$di[1]-$di[0]";
$df = explode('/', $datafinal);
$datafinal = "$df[2]-$df[1]-$df[0]";


            //seleciona todos os dados daquele determinado produto, entre as datas indicadas, e organiza em ordem crescente
      $consulta = mysql_query("SELECT * FROM tabela WHERE produto='$produto' AND str_to_date(data, '%d/%m/%Y') BETWEEN '$datainicial' AND '$datafinal' ORDER BY str_to_date(data, '%d/%m/%Y') ASC");      
        while($ln=mysql_fetch_array($consulta)){
            $data = $ln['data'];
            
              echo $data ."<br>";//lista as datas
                           
        }
?>

Faça bom uso. Boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não necessário utlizar-se da função explode para formatar as datas, veja como é simples:

 

 

 

<?php  
$datainicial = '12/01/2013'; //modifique pra receber o valor digitado  
$datafinal = '11/04/2013';  //modifique pra receber o valor digitado 

 

$di = date('Y-m-d', strtotime($datainicial)); 
$df = date('Y-m-d', strtotime($datafinal));     
        
     

$consulta = mysql_query("SELECT * FROM tabela WHERE produto='$produto' AND str_to_date(data, '%d/%m/%Y') BETWEEN '$datainicial' AND '$datafinal' ORDER BY str_to_date(data, '%d/%m/%Y') ASC");

while($ln=mysql_fetch_array($consulta)){             

$data = $ln['data'];  
                          
echo $data ."<br>";

//lista as datas                                     

} 
?>

 




			
		

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.