Ir para conteúdo

POWERED BY:

Arquivado

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

Patriciaff

Sistema de busca por intervalo de datas

Recommended Posts

Não consigo fazer um sistema de busca com 2 campo de texto para busca entre datas.

 

 

Tenho uma tabela chamada teste no BD com o campo data.

 

Gostaria de fazer um sistema de busca onde eu colocasse dois campo de texto para o usuario colocar data inicial e data final...

aí apareceria apenas os dados dos campos dessas datas....

 

Alguém pode me ajudar??

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 11/12/2013 at 19:24, William Bruno disse:

use o BETWEEN do SQL

 

Mas ele é para datas pré estipuladas...

Gostaria de colocar campo de texto para o usuário escolher as duas datas.. a inicial e a final...

 

o meu campo data é VARCHAR

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 12/12/2013 at 11:38, Patriciaff disse:

 

 

Mas ele é para datas pré estipuladas...

Gostaria de colocar campo de texto para o usuário escolher as duas datas.. a inicial e a final...

De onde você tirou isto?

 

 

<?php
 
$data1 = $_POST['data1'];
$data2 = $_POST['data2'];
 
... WHERE campo_da_data BETWEEN '$data1' AND '$data2'...
 
?>

 

As datas devem estar nos formatas de data aceitos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O meu santo, os caras passaram tudo mas pelo visto você quer algo pronto.

 

Por favor procure entender o Código do Eserra

 

--

 

... QUANDO o seu campo data do banco de dados ESTIVER ENTRE data do primeiro edit E data do segundo edit

 

Deu pra captar ai agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 12/12/2013 at 12:17, srnalim disse:

O meu santo, os caras passaram tudo mas pelo visto você quer algo pronto.

 

Por favor procure entender o Código do Eserra

 

--

 

... QUANDO o seu campo data do banco de dados ESTIVER ENTRE data do primeiro edit E data do segundo edit

 

Deu pra captar ai agora?

 

Entendi...

 

Mas ele mostra todos os registros... não filtra por data...

o meu campo data esta Varchar....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim ele irá trazer todos registros entre das datas.

 

Você deve colocar o campo do tipo Date passar a cadastrar com o Stamp Y-M-D (Ano-Mes-dia) assim é certo de não da erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 12/12/2013 at 12:27, ESerra disse:

Varchar para data? Esquece a busca então.

Até dá pra buscar, mas tem que converter e vai perder uma performance do c*ralh0 nas buscas...

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 12/12/2013 at 13:48, Evandro Oliveira disse:

Até dá pra buscar, mas tem que converter e vai perder uma performance do c*ralh0 nas buscas...

 

se eu mudar o campo para DATE ele passa a ser 0000-00-00

 

na minha pag, funcao.php está

 

date_default_timezone_set('America/Fortaleza');$gera_data = date('d/m/Y');

 

encontrei o comando CONVERT(VARCHAR,<campoDataTime>,<códigoFormato>)

mas não sei como usar

 

Alguém pode me ajudar?

Com esse comando posso mudar a data para DATE no BD e usar a busca com between???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Skype: anthonynalim , tu vai ter que acessar a base de dados com o phpmyadmin alterar o tipo não precisa de comando, e passar no no código a data assim date('Y-m-d');

Compartilhar este post


Link para o post
Compartilhar em outros sites

use formato DATETIME, e coloque sua data em formato americano: Y-m-d H:i:s para os 2 intervalos.

depois é só trazer na query:

"SELECT tabela_x.*,DATE_FORMAT(tabela_x.data_inicial,'%d/%m/%Y %H:%i:%s') AS data_inicial,DATE_FORMAT(tabela_x.data_final,'%d/%m/%Y %H:%i:%s') AS data_final from tabela_x WHERE '".date('Y-m-d H:i:s')."' BETWEEN  data_inicial AND data_final";

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 12/12/2013 at 20:21, ivanferrer disse:

 

use formato DATETIME, e coloque sua data em formato americano: Y-m-d H:i:s para os 2 intervalos.

 

depois é só trazer na query:

 

 

"SELECT tabela_x.*,DATE_FORMAT(tabela_x.data_inicial,'%d/%m/%Y %H:%i:%s') AS data_inicial,DATE_FORMAT(tabela_x.data_final,'%d/%m/%Y %H:%i:%s') AS data_final from tabela_x WHERE '".date('Y-m-d H:i:s')."' BETWEEN  data_inicial AND data_final";

 

 

Mudei campo para tipo DATE onde ficou 0000-00-00

e usei o between no select...

.

Mas como faço para converter a entrada do campo de texto onde o usuário colocará data tipo 00-00-0000

para ler a do bd tipo 0000-00-00????

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 12/12/2013 at 17:55, Patriciaff disse:

se eu mudar o campo para DATE ele passa a ser 0000-00-00

Não, eu tava falando de algo mais nessa pegada aqui:

  Em 12/12/2013 at 20:21, ivanferrer disse:

 

use formato DATETIME, e coloque sua data em formato americano: Y-m-d H:i:s para os 2 intervalos.

 

depois é só trazer na query:

 

 

 




"SELECT tabela_x.*,DATE_FORMAT(tabela_x.data_inicial,'%d/%m/%Y %H:%i:%s') AS data_inicial,DATE_FORMAT(tabela_x.data_final,'%d/%m/%Y %H:%i:%s') AS data_final from tabela_x WHERE '".date('Y-m-d H:i:s')."' BETWEEN  data_inicial AND data_final";

 

 

 

 

  Em 12/12/2013 at 17:55, Patriciaff disse:

encontrei o comando CONVERT(VARCHAR,<campoDataTime>,<códigoFormato>)

mas não sei como usar

 

Alguém pode me ajudar?

Com esse comando posso mudar a data para DATE no BD e usar a busca com between???

O convert vai converter pra 0000-00-00 também porque a notação dos VARCHAR não estão em datas válidas.

 

Pra ajustar isso, você pode rodar isso aqui:

 



/** dados configuráveis **/
define('DB_HOSTNAME', 'localhost'); // Endereço do servidor MySQL
define('DB_USERNAME', 'root'); // Nome do usuário do banco
define('DB_PASSWORD', 'root'); // Senha do usuário fornecido
define('DB_SCHEMA', 'my_db'); // Nome do banco de dados
define('DB_TABLE', 'my_table'); // Nome da tabela
define('DB_FIELD', 'my_field'); // Nome do campo com as datas em varchar
/** fim dos dados configuráveis **/

ini_set('display_errors', true);
error_reporting(-1);
$dsn = 'mysql:host=' . DB_HOSTNAME;
$conn = new PDO($dsn, DB_USERNAME, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->exec('use ' . DB_SCHEMA);
$query = 'select distinct %s from %s';
$data = $conn->query(sprintf($query, DB_FIELD, DB_TABLE));
$query = 'update %s set %s = ? where %s = ?';
$stmt = $conn->prepare(sprintf($query, DB_TABLE, DB_FIELD, DB_FIELD));
foreach ($data->fetchAll(PDO::FETCH_COLUMN, 0) as $value) {
    $newVal = implode('-', array_reverse(explode('/', $value)));
    $stmt->execute(array($newVal, $value));
}
print "Concluído";

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 13/12/2013 at 14:28, Evandro Oliveira disse:

 

Não, eu tava falando de algo mais nessa pegada aqui:

 

 

O convert vai converter pra 0000-00-00 também porque a notação dos VARCHAR não estão em datas válidas.

 

Pra ajustar isso, você pode rodar isso aqui:

 

 



/** dados configuráveis **/
define('DB_HOSTNAME', 'localhost'); // Endereço do servidor MySQL
define('DB_USERNAME', 'root'); // Nome do usuário do banco
define('DB_PASSWORD', 'root'); // Senha do usuário fornecido
define('DB_SCHEMA', 'my_db'); // Nome do banco de dados
define('DB_TABLE', 'my_table'); // Nome da tabela
define('DB_FIELD', 'my_field'); // Nome do campo com as datas em varchar
/** fim dos dados configuráveis **/

ini_set('display_errors', true);
error_reporting(-1);
$dsn = 'mysql:host=' . DB_HOSTNAME;
$conn = new PDO($dsn, DB_USERNAME, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->exec('use ' . DB_SCHEMA);
$query = 'select distinct %s from %s';
$data = $conn->query(sprintf($query, DB_FIELD, DB_TABLE));
$query = 'update %s set %s = ? where %s = ?';
$stmt = $conn->prepare(sprintf($query, DB_TABLE, DB_FIELD, DB_FIELD));
foreach ($data->fetchAll(PDO::FETCH_COLUMN, 0) as $value) {
    $newVal = implode('-', array_reverse(explode('/', $value)));
    $stmt->execute(array($newVal, $value));
}
print "Concluído";

 

 

 

Mas mudei para DATE e inclui comando em todas as paginas para ser visualizada como 00-00-0000.

 

O problema agora é como faço para quando o usuário preencher no campo 00-00-0000 ela consiga ler a data que esta em

formato 0000-00-00 no BD.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a função date do PHP ou DATE_FORMAT do MySQL:

 

// PHP
$data = date("d/m/Y", strtotime($data_no_formato_americano_vindo_do_banco_de_dados));
 
// MySQL
$sql = "SELECT DATE_FORMAT(nome_coluna, '%d/%m/%Y') AS 'nome_que_voce_quiser'";

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 16/12/2013 at 11:40, Paulo de Tarso F. M. disse:

 

Use a função date do PHP ou DATE_FORMAT do MySQL:

 

// PHP
$data = date("d/m/Y", strtotime($data_no_formato_americano_vindo_do_banco_de_dados));
 
// MySQL
$sql = "SELECT DATE_FORMAT(nome_coluna, '%d/%m/%Y') AS 'nome_que_voce_quiser'";

Percebi agora que depois que mudei o campo para tipo DATE nao está mais gravando a data....

Por quê será?????

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.