Ir para conteúdo

POWERED BY:

Arquivado

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

josenilson

consultar por data inicial e data final

Recommended Posts

olá pessoal tenho esse Script no qual eu uso para gerar um relatório a partir de um campo inputs,  agora estou tentando fazer com que esse script funcione porem com dois campos no meu caso Data inicial  e Data Final,  não sei se estou correto mas o SQL que devo utilizar seria esse   SELECT * FROM Pessoa WHERE Nascimento BETWEEN '01-01-1981' AND '31-12-1990'

SELECT * FROM cad_clientes WHERE data_nascimento BETWEEN 'varial data inicial ' AND 'variavel data final'

me corrija por favor seu eu estiver errado,  minha limitação esta como devo adaptar o código que já utilizo para armazenar nesse caso os  dois valores,  e mais uma coisa por favor como faço para que ao retornar o resultado da consulta seja mostrado os nomes das respectivas dadas consultadas.

 

abaixo esta o código que utilizo, obrigado.

 

<?php

if (isset($_POST["search"])) {
		$searchq = $_POST["search"];
		$searchq = preg_replace("#[^0-9a-z]#i", "",$searchq);
		$consulta = $pdo->query(" SELECT nome FROM cad_cliente WHERE nome LIKE '$searchq%'   ")or die ("could not search !" );

			$dados = $consulta->fetchAll(PDO::FETCH_ASSOC);
			$numRows = count($dados);

			if($numRows > 0) {
			foreach ($dados as $result) {
		
			echo "<html><label></label><p>".$result['nome']."<br/></html>";
				
			}
				
			}
			else {
			echo" Não há registro";
						}
		}
		
	?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
19 horas atrás, Luiz Gustavo Costa Ceolin disse:

A data no banco de dados é ao contrario 2017-02-09

Luiz eu estou tentando aqui e o progresso que tive foi o seguinte,  no código eu consigo pegar os resultas mas somente setando manualmente as data na query, não esta dando certo quando eu tento armazenar os dados dos inputs. 

 

segue abaixo como estou fazendo, o que pode estar erado ?

 

if (isset($_POST["localizar"])) {
		$data_inicial = $_POST["data_inicial"];
		$data_inicial = preg_replace("#[^0-9a-z]#i", "",$data_inicial);
		
		$data_final = $_POST["data_final"];	
		$data_final = preg_replace("#[^0-9a-z]#i", "",$data_final);
		
		
		
		$consulta = $pdo->query(" SELECT * FROM cad_cliente WHERE data_nascimento BETWEEN '01/01/2016'  AND '01/01/2017' ")or die ("could not search !" );

			$dados = $consulta->fetchAll(PDO::FETCH_ASSOC);
			$numRows = count($dados);

			if($numRows > 0) {
			foreach ($dados as $result) {
		
			echo "<html><label></label><p>".$result['data_nascimento']."<br/></html>";
				
				
			}
				
			}
			
			else {
			echo" Não há registro ss";
						}
		}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma pergunta, no banco de dados a data está gravada num campo tipo Date ou num campo tipo Varchar?

 

Se estiver em um varchar, recomendo que o converta para Date e salve as datas no formato ANSI (Y-m-d).
Se isso não for possível talvez seja necessário converter as datas dentro da consulta usando os comandos STR_TO_DATE e DATE_FORMAT do MySQL.

 

Outro detalhe que notei, no seu preg_replace, você está usando #, não seria /?

E a regex que você está usando removeria o "-" da data, será que não é ai que está o problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, RodriAndreotti disse:

Uma pergunta, no banco de dados a data está gravada num campo tipo Date ou num campo tipo Varchar?

 

Se estiver em um varchar, recomendo que o converta para Date e salve as datas no formato ANSI (Y-m-d).
Se isso não for possível talvez seja necessário converter as datas dentro da consulta usando os comandos STR_TO_DATE e DATE_FORMAT do MySQL.

 

Outro detalhe que notei, no seu preg_replace, você está usando #, não seria /?

E a regex que você está usando removeria o "-" da data, será que não é ai que está o problema?

Obrigado pela ajuda, então deixa ir por partes pra não me perder, sou iniciante  e agradeço desde já pela ajuda.

 

essa base de dados ainda não esta sendo utilizada em uma larga escala pois estou homologando o formulário de cadastro, neste caso o que seria de melhor resultado para não gerar problemas como esse e outros futuros,  ? 

 

devo mudar o campo data para DATE ?   outra duvida,  fazendo isso vai mudar alguma coisa na minha função que grava os dados no banco de dados ?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 horas atrás, josenilson disse:

Obrigado pela ajuda, então deixa ir por partes pra não me perder, sou iniciante  e agradeço desde já pela ajuda.

 

essa base de dados ainda não esta sendo utilizada em uma larga escala pois estou homologando o formulário de cadastro, neste caso o que seria de melhor resultado para não gerar problemas como esse e outros futuros,  ? 

 

devo mudar o campo data para DATE ?   outra duvida,  fazendo isso vai mudar alguma coisa na minha função que grava os dados no banco de dados ?

 

 

Olá, continuando por partes... rs

Vamos lá:

devo mudar o campo data para DATE ?

Eu recomendaria esta mudança sim, fica mais fácil trabalhar com datas no banco de dados quando os dados estão no formato correto.

 

outra duvida,  fazendo isso vai mudar alguma coisa na minha função que grava os dados no banco de dados ?

Como está sua função agora?

Mas se você está gravando como varchar, provavelmente terá que mudar sim, mas não é muita coisa, se você está recebendo um texto do formulário poderá utilizar a função do mysql STR_TO_DATE para converter a data no formato para o banco.

Agora se você está usando um objeto de DateTime é só usar o método format e converter a data para o formato adequado (Y-m-d)

 

Referências para consulta:

MySQL STR_TO_DATE

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

http://www.w3resource.com/mysql/date-and-time-functions/mysql-str_to_date-function.php

 

PHP DateTime

http://php.net/manual/pt_BR/class.datetime.php

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, RodriAndreotti disse:

Olá, continuando por partes... rs

Vamos lá:

devo mudar o campo data para DATE ?

Eu recomendaria esta mudança sim, fica mais fácil trabalhar com datas no banco de dados quando os dados estão no formato correto.

 

outra duvida,  fazendo isso vai mudar alguma coisa na minha função que grava os dados no banco de dados ?

Como está sua função agora?

Mas se você está gravando como varchar, provavelmente terá que mudar sim, mas não é muita coisa, se você está recebendo um texto do formulário poderá utilizar a função do mysql STR_TO_DATE para converter a data no formato para o banco.

Agora se você está usando um objeto de DateTime é só usar o método format e converter a data para o formato adequado (Y-m-d)

 

Referências para consulta:

MySQL STR_TO_DATE

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

http://www.w3resource.com/mysql/date-and-time-functions/mysql-str_to_date-function.php

 

PHP DateTime

http://php.net/manual/pt_BR/class.datetime.php

ok eu mudei o campo data de CHARCAR para DATE como imaginei minha função não esta gravando neste campo, eu uso uma mascara no input data, não sei se isso vai interferir, chamo esta data  por um JS dessa forma .

<input name="data_nascimento" onkeypress="mascaraData( this, event )"/>

Ai eu armazeno no post para gravar na função., abaixo esta o post que armazena o valor vindo o input

 

//------INICIO--DO--POST--ONDE GRAVA PARA CADASTRAR-------------------------------------------------------------------

if (isset($_POST['cadastro'])) :
	$data_nascimento = filter_input(INPUT_POST,"data_nascimento",FILTER_SANITIZE_STRING);
	
	
//------NESTE IF EU ARMAZENO OS DADOS E ENVIO PARA A FUNÇÃO  CADASTRO ---------------------------------------------
	if (cadastro($data_nascimento)) :
	//echo "Cadastrou";

	else :

		echo "erro ao cadastrar";
	endif;
endif;

//------FIM--DO--POST--ONDE GRAVA PARA CADASTRAR-------------------------------------------------------------------

 por fim a função que grava no banco. 

 

function cadastro ( $data_nascimento){
	$pdo = conectar();
	
	try {
   $inserir = $pdo->prepare("INSERT INTO cad_cliente (data_nascimento) VALUES (?)");
	$inserir->bindValue(1, $data_nascimento);				   
		
		
	    $inserir->execute();
   
   if ($inserir->rowCount()== 1):
   return true;
   else:
   return false;
   endif;
   
	} catch(PDOException $erro) {
		echo "ERRO AO CADASTRAR" . $erro->getMessage();
   
	}
}

Pode me mostrar como devo fazer para salvar ?  ou seja, o que devo mudar nos códigos já que mudei o campo data para DATE,  e umas duvidas que me veio, sendo assim vou poder continuar utilizando a mascara no input ?  e quando salvar no banco vai salvar com a mascara ? 

Desculpa por tantas perguntas,  mas é assim que venho aprendendo  este fórum aqui  tem mais conteúdo que muitas faculdades por ai, obrigado. 

Compartilhar este post


Link para o post
Compartilhar em outros sites
VALUES (?)

Imaginando que você está usando a data no formato dd/mm/aaaa, mude o trecho acima para:

VALUES (STR_TO_DATE(?,'%d/%m/%Y'))

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, RodriAndreotti disse:

VALUES (?)

Imaginando que você está usando a data no formato dd/mm/aaaa, mude o trecho acima para:


VALUES (STR_TO_DATE(?,'%d/%m/%Y'))

 

Perfeito, fiz a alteração dos parâmetros no INSERT e no UPDATE esta salvado e atualizando, blz. 

 

poderia então ajudar esse apoio na elaboração do relatório ? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... agora no relatório, aquela consulta que você fez vai seguir a mesma lógica:

 

SELECT * FROM cad_clientes WHERE data_nascimento BETWEEN STR_TO_DATE(?, '%d/%m/%Y') AND STR_TO_DATE(?, '%d/%m/%Y')

Uma vez os campos estando em formato date o BETWEEN consegue lidar com eles.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então minha dificuldade esta bem ai,  eu achei um formulário na internet com radio Button e esta avançado pra mim pois ainda não peguei nada como isso antes, e bem o que eu preciso porem não sei como ele funciona. Sera que analizando ele com sua experiencia poderia dizer como isso da certo ?

 

abaixo o form . 

 

 

<form id="form1" name="form1" method="post" action="listar.php"> 
  <table width="550" class="estilotabela" cellspacing="0" border="0">
    <tr align="center" class="estilocelula2">
      <td width="103" class="estilocelula2">Escolher</td>
      <td width="380" class="estilocelula2">Tipo de Relatorio</td>
    </tr>
    <tr>
      <td align="center" valign="middle">
          <input type="radio" name="tipo_rel" value="1" id="tipo_rel_0" />
      </p></td>
      <td valign="middle">        Tipo de Baixa                   
        <label>
          <select name="alfabeto" id="alfabeto">
          <option value="">ORDEM_ALFABETICA</option>
          <option value="A">A</option>
          <option value="B">B</option>
          <option value="C">C</option>
          
          </select>
      </label></td>
    </tr>
    <tr>
      <td align="center"><input type="radio" name="tipo_rel" value="2" id="tipo_rel_" /></td>
      <td>Data Cadastro Inicial 
        <input name="data" type="text" id="data" OnKeyUp="mascaraData(this);" size="10" maxlength="10" /> 
      Data Final 
      <input name="data1" type="text" id="data1" size="10" OnKeyUp="mascaraData1(this);" maxlength="10" /></td>
    </tr>
<tr>
    
  <tr>
      <td colspan="2" align="center"><label>
        <br>
        <input type="submit" name="Enviar" id="Enviar" value="Enviar" />
      </label></td>
    </tr>
  </table>
  <br />
</form>
<p> </p>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... mas este radio button está, digamos assim, inútil ai, pois ele só tem um valor.

 

O que eu entendo neste form é que ele esta assim:

 

Tipo de relatório: ( x )

Sacou?, é um radio que não tem função.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem fora o radio Button como ficaria o form então ?  tipo assim, seria o select option  com o  a ordem alfabética e dois input com a data ?  e como isso da certo, quero dizer como vou fazer distinção um tipo de relatório  do outro ? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... ai é que está, se realmente for isso, está faltando radio button.

 

O Radio sempre estará presente em mais de uma tag, se não ele perde sentido, por exemplo:

Tipo de relatório:
( x ) Simplificado

(    ) Detalhado
(    ) Gráfico

 

Ou então

(  x ) Crescente

(    ) Decrescente

Compartilhar este post


Link para o post
Compartilhar em outros sites

sem o radio seria isso ?

<form id="form1" name="form1" method="post" action="listar.php"> 
  <table width="550" class="estilotabela" cellspacing="0" border="0">
    <tr align="center" class="">
      <td width="103" class="">Escolher</td>
      <td width="380" class="">Tipo de Relatorio</td>
    </tr>
    <tr>
      <td align="center" valign="middle">
          
      </p></td>
      <td valign="middle">        Tipo de Baixa                   
        <label>
          <select name="destinatario" id="destinatario">
          <option value="">ORDEM_ALFABETICA</option>
          <option value="A">A</option>
          <option value="B">B</option>
          <option value="C">C</option>
          
          </select>
      </label></td>
    </tr>
    <tr>
      <td ></td>
      <td>Data Cadastro Inicial 
        <input name="data" type="text" id="data" OnKeyUp="mascaraData(this);" size="10" maxlength="10" /> 
      Data Final 
      <input name="data1" type="text" id="data1" size="10" OnKeyUp="mascaraData1(this);" maxlength="10" /></td>
    </tr>
<tr>
    
  <tr>
      <td colspan="2" align="center"><label>
        <br>
        <input type="submit" name="Enviar" id="Enviar" value="Enviar" />
      </label></td>
    </tr>
  </table>
  <br />
</form>
<p>&nbsp;</p>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então vamos lá...

 

Primeiro, você vai receber o select no PHP assim como fez com a data:

 

$ordernarPor = filter_input(INPUT_POST, 'ordenarPor', FILTER_SANITIZE_STRING);

// E no final da consulta você insere o campo filtrado junto a uma cláusula ORDER BY
$sql = 'SELECT * FROM cad_clientes WHERE data_nascimento BETWEEN STR_TO_DATE(?, '%d/%m/%Y') AND STR_TO_DATE(?, '%d/%m/%Y') ORDER BY ' . $ordenarPor;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora como  vou tratar isso no listar.php  ?  assim como vou distinguir se foi o select com a ordem alfabética ou se foi o input com as datas  que enviou as informações para gerar o relatório. 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, josenilson disse:

sem o radio seria isso ?


<form id="form1" name="form1" method="post" action="listar.php"> 
  <table width="550" class="estilotabela" cellspacing="0" border="0">
    <tr align="center" class="">
      <td width="103" class="">Escolher</td>
      <td width="380" class="">Tipo de Relatorio</td>
    </tr>
    <tr>
      <td align="center" valign="middle">
          
      </p></td>
      <td valign="middle">        Tipo de Baixa                   
        <label>
          <select name="destinatario" id="destinatario">
          <option value="">ORDEM_ALFABETICA</option>
          <option value="A">A</option>
          <option value="B">B</option>
          <option value="C">C</option>
          
          </select>
      </label></td>
    </tr>
    <tr>
      <td ></td>
      <td>Data Cadastro Inicial 
        <input name="data" type="text" id="data" OnKeyUp="mascaraData(this);" size="10" maxlength="10" /> 
      Data Final 
      <input name="data1" type="text" id="data1" size="10" OnKeyUp="mascaraData1(this);" maxlength="10" /></td>
    </tr>
<tr>
    
  <tr>
      <td colspan="2" align="center"><label>
        <br>
        <input type="submit" name="Enviar" id="Enviar" value="Enviar" />
      </label></td>
    </tr>
  </table>
  <br />
</form>
<p>&nbsp;</p>

 

Exato, já dentro do select ordernar você vai colocar os campos pelos quais você pretende ordenar

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • Por FabianoSouza
      Tenho uma function que precisa receber 02 argumentos.
      Ela funciona se eu aplicar num select qualquer. Mas se eu aplicar num select dinâmico, ocorre erro.
      Veja trecho do meu select.
      ... SET @sql = @sql +', dbo.retornaIco_ItemBloq((SELECT COUNT(*) FROM dbo.tab AS TT2 WHERE TT2.codCategTreina = CTT.id),'+@title+') AS ''resp''' ... No caso, o primeiro argumento da function dbo.retornaIco_ItemBloq é um SELECT COUNT.
      O segundo argumento é uma variável (que está devidamente declarada e definida).
       
      O erro ocorre porque ao executar (chamando EXEC(@sql) ), o SQL entende que o segundo argumento é uma coluna da consulta principal, pois existe uma vírgula antes da variável @title (que é o segundo argumento da function).
      Repito. Se eu aplicar essa function num select normal, funciona normalmente. Porém, preciso que funcione num SQL dinâmico porque é esse é o padrão que estou adotando para o sistema todo.
       
      A function dbo.retornaIco_ItemBloq faz o seguinte:
      1) Recebe o valor do COUNT e da variável @title
      2) Se o COUNT for maior que  Zero, cria uma tag HTML (uma SPAN), define sua title com o valor da variável @title e passa para uma variável
      3) Retorna o HTML que será exibido no resultado da consulta principal
      É super simples.
       
      Há outra forma de chamar a function?
    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por Sapinn
      Olá a todos existe alguma maneira de trazer todos os dados de uma tabela menos o maior valor?
    • Por Wandersonwfs
      Bom dia Pessoal,
       
      Estou com um problema para finalizar uma consulta onde, quando executado a consulta  e não encontrado nenhuma informação no período solicitado, tenho que trazer pelo menos o nome da conta.
       
      Consulta,
       
      WITH TMPESTONO (
          NOME_IMPOSTO
          ,MES
          ,VALOR
          )
      AS (
          SELECT 'ESTORNO SOBRE GREEN VILLE' AS NOME_IMPOSTO
              ,'F_' + SZN.ZN_ITEM AS FILFOR
              ,SUM((SZN.ZN_PRV * SZN.ZN_PRCAPL) / 100) AS TOTAL
          FROM SZN010 SZN
          WHERE SZN.D_E_L_E_T_ = ' '
              AND SZN.ZN_ITEM IN (
                  '01'
                  ,'16'
                  ,'30'
                  ,'40'
                  ,'46'
                  ,'51'
                  ,'52'
                  ,'60'
                  ,'70'
                  ,'72'
                  ,'73'
                  ,'80'
                  )
              AND SZN.ZN_DATA BETWEEN '20220701'
                  AND '20220731'
              AND SZN.ZN_DESC = ('GRENVILLE')
          GROUP BY SZN.ZN_DESC
              ,SZN.ZN_ITEM
          )
      SELECT *
      FROM (
          SELECT NOME_IMPOSTO
              ,MES
              ,VALOR
          FROM TMPESTONO
          ) AS PivotData
      PIVOT(SUM(VALOR) FOR MES IN (
                  [F_16]
                  ,[F_30]
                  ,[F_40]
                  ,[F_46]
                  ,[F_51]
                  ,[F_52]
                  ,[F_60]
                  ,[F_70]
                  ,[F_72]
                  ,[F_73]
                  ,[TOTAL]
                  )) AS PivotTable2
      ORDER BY 1
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.