Jump to content
Santos_2015

filtro sem informar campo data [resolvido]

Recommended Posts

Galera é o seguinte,

 

tenho filtro antes do montar meu select, tenho três campos no filtro: cod_tipo_item_despesa, data_inicio e data_fim. só que caso a data não tenha sido informada, minha consulta retorna falso, segue sql:

select...

where desp.cod_tipo_item_despesa like :cod_tipo_item_despesa 
			and DATE_FORMAT(desp.data_despesa,'%d/%m/%Y') BETWEEN :data_inicio AND :data_fim

 

Thanks.

Share this post


Link to post
Share on other sites

Qual data não foi informada ?

 

Um valor não informado (null) sempre retorna false em uma pesquisa.

 

 

Share this post


Link to post
Share on other sites
3 minutos atrás, Motta disse:

Qual data não foi informada ?

 

Um valor não informado (null) sempre retorna false em uma pesquisa.

 

 

nenhuma das duas, nem data_inicio nem data_fim(por padrão quando não é informado é enviado "1969-12-31", tentei tratar substituindo por '%' mas não me retornou false na pesquisa), no caso seria informado apenas o "cod_tipo_item_despesa".

 

Share this post


Link to post
Share on other sites

Ponha uma critica não permitindo data nula na pesquisa 

Share this post


Link to post
Share on other sites
6 horas atrás, Motta disse:

Ponha uma critica não permitindo data nula na pesquisa 

Mas o problema é que ela pode ou não ser informada, não é obrigatório

Share this post


Link to post
Share on other sites

Tente com coalesce 

select...

where desp.cod_tipo_item_despesa like :cod_tipo_item_despesa 
            and DATE_FORMAT(desp.data_despesa,'%d/%m/%Y') 
                  BETWEEN COALESCE(:data_inicio,MAKEDATE(2010,1)) and 
                          COALESCE(:data_fim,CURDATE())

vide

 

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

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

 

Nota , não uso Mysql pode ter algum erro de síntaxe nisto mas a ideia básica e tratar o valor nulo.

  • +1 1

Share this post


Link to post
Share on other sites
5 horas atrás, Motta disse:

Tente com coalesce 


select...

where desp.cod_tipo_item_despesa like :cod_tipo_item_despesa 
            and DATE_FORMAT(desp.data_despesa,'%d/%m/%Y') 
                  BETWEEN COALESCE(:data_inicio,MAKEDATE(2010,1)) and 
                          COALESCE(:data_fim,CURDATE())

vide

 

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

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

 

Nota , não uso Mysql pode ter algum erro de síntaxe nisto mas a ideia básica e tratar o valor nulo.

 

legal, já havia tentado com coalesce, pelo que entendi está "amarrando" os intervalos... vou tetar aqui, Valeu.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mamotinho
      Olá, gostaria de sabe como posso fazer uma contagem regressiva apartir de um registro em meu banco de dados eu tentei montar um código da seguinte forma:

       
      <? $DateGET = date('m/d/Y H:i A', strtotime($result->DateDiscount)); ?> <script> var valueDate = <?=$DateGET?>; var end = new Date(valueDate); var _second = 1000; var _minute = _second * 60; var _hour = _minute * 60; var _day = _hour * 24; var timer; function showRemaining() { var now = new Date(); var distance = end - now; if (distance < 0) { clearInterval(timer); document.getElementById("countdown").innerHTML = "EXPIRED!"; return; } var days = Math.floor(distance / _day); var hours = Math.floor((distance % _day) / _hour); var minutes = Math.floor((distance % _hour) / _minute); var seconds = Math.floor((distance % _minute) / _second); document.getElementById("countdown").innerHTML = "<span class='n_date day' id='days'>" + days + "</span><span class='date'>일</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time hour' id='hrs'>" + hours + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time minute' id='minus'>" + minutes + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time second' id='secs'>" + seconds + "</span>"; } timer = setInterval(showRemaining, 1000); </script> Mais infelizmente não passou a data registrada no banco de dados, alguém teria ideia de como posso ta fazendo.
    • By Jefferson andre
      Mestres saudações, 
      Meu banco de dados de municipios brasileiros tem mais de 10 mil registros, entao para que o site nao fique lento eu preciso filtrar o municipio somente apos o usuario selecionar a UF, e sem sair da tela.
       
      Segue meu script, nao sei fazer apos onchange.
       
      Aparece a mensagem alert("Busca em desenvolvimento: + estado") corretamente
       
      Agradeço alguma ajuda
       
      <html> <body> <div class="form-group col-md-2"> <label for="inputestado">Estado</label> <select class="custom-select" name="estado" id="estado" onchange="funcao_localizar_municipios()"> <option value="AC">AC</option> <option value="AL">AL</option> <option value="AM">AM</option> <option value="AP">AP</option> <option value="BA">BA</option> <option value="CE">CE</option> <option value="DF">DF</option> <option value="ES">ES</option> <option value="GO">GO</option> <option value="MA">MA</option> <option value="MT">MT</option> <option value="MS">MS</option> <option value="MG">MG</option> <option value="PA">PA</option> <option value="PB">PB</option> <option value="PR">PR</option> <option value="PE">PE</option> <option value="PI">PI</option> <option value="RJ">RJ</option> <option value="RN">RN</option> <option value="RO">RO</option> <option value="RS">RS</option> <option value="RR">RR</option> <option value="SC">SC</option> <option value="SE">SE</option> <option value="SP">SP</option> <option value="TO">TO</option> </select> </div> <div class="form-group col-md-6"> <label for="inputid_municipio">Municipio</label> <br> <?php $filtro_municipios = $arquivo->prepare("SELECT id, nome_uf, nome_distrito,sigla_uf FROM municipios ORDER BY nome_distrito,nome_uf"); //WHERE sigla_uf='$estado' $filtro_municipios->execute(); //print_r($filtro_clientes); ?> <select class="custom-select col-md-12" name="id_municipio" id="id_municipio"> <option value="">Clique para selecionar</option> <?php while ($municipios = $filtro_municipios->fetch()) {?> <option value="<?php echo $municipios['id'] ?>" ><?php echo $municipios['nome_distrito']." - ".$municipios['nome_uf'];?> </option> <?php } ?> </select> </div> </body> <script> function funcao_localizar_municipios(procurar) { var estado = document.getElementById("estado").value; if (estado ==''){ alert("campo em branco"); } else { alert("Busca em desenvolvimento: + estado"); } } </html>  
    • By Alberto Nascimento
      Como faço para inserir data e horário no campo abaixo?
       
      <input name="horarioatual" id="horarioatual" style="width: 366px" type="text" />  
      Quando utilizava no PHP 5.3 funcionava com "echo", porém agora não esta mais quando estou utilizando o PHP 5.6
       
      <?php echo "$date"; ?>  
    • By lucianfpaula
      Olá bom dia, estou com um problema, eu estou tentando fazer um select que me retorne dados de uma tabela com data igual a data do dia ou maior mas não estou conseguindo, só consigo trazer datas maiores que a do dia, mas datas igual ao dia não consigo, estou usando o seguinte select
      SELECT * FROM tabela WHERE id = 1 AND dataTermino >= NOW()
       
      Não sei se tem a ver com a data do servidor 
    • By Kefatif
      Prezados, bom dia…
       
      Preciso da ajuda dos Srs…
       
      Pois quando filtro por janeiro ao invés de me trazer somente os produtos que venceram em janeiro acaba me trazendo de todos os outros meses incluindo o de janeiro.
       
      Segue o meu código abaixo:
       
      <?php if (isset($_POST['pesquisar'])) { $ano = $_POST["ano"]; $mes = $_POST["mes"]; $unid = $_POST["unid"]; $tipoitem = $_POST["tipoitem"]; $item = $_POST["item"]; if (isset($_POST["ano"]) and empty($_POST["mes"]) and empty($_POST["unid"]) and empty($_POST["tipoitem"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.VALIDADE LIKE '%".$ano."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["ano"]) and isset($_POST["mes"]) and empty($_POST["unid"]) and empty($_POST["tipoitem"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.VALIDADE LIKE '%".$ano."%') AND (A.VALIDADE LIKE '%".$mes."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["ano"]) and isset($_POST["mes"]) and isset($_POST["unid"]) and empty($_POST["tipoitem"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.VALIDADE LIKE '%".$ano."%') AND (A.VALIDADE LIKE '%".$mes."%') AND (A.CNES LIKE '%".$unid."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["ano"]) and isset($_POST["mes"]) and isset($_POST["unid"]) and isset($_POST["tipoitem"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.VALIDADE LIKE '%".$ano."%') AND (A.VALIDADE LIKE '%".$mes."%') AND (A.CNES LIKE '%".$unid."%') AND (B.TIPO_ITEM LIKE '%".$tipoitem."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["ano"]) and isset($_POST["mes"]) and isset($_POST["unid"]) and isset($_POST["tipoitem"]) and isset($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.VALIDADE LIKE '%".$ano."%') AND (A.VALIDADE LIKE '%".$mes."%') AND (A.CNES LIKE '%".$unid."%') AND (B.TIPO_ITEM LIKE '%".$tipoitem."%') AND (B.ITEM LIKE '%".$item."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["mes"]) and empty($_POST["ano"]) and empty($_POST["unid"]) and empty($_POST["tipoitem"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.VALIDADE LIKE '%".$mes."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["mes"]) and isset($_POST["unid"]) and empty($_POST["tipoitem"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.VALIDADE LIKE '%".$mes."%') AND (A.CNES LIKE '%".$unid."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["mes"]) and isset($_POST["unid"]) and isset($_POST["tipoitem"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.VALIDADE LIKE '%".$mes."%') AND (A.CNES LIKE '%".$unid."%') AND (B.TIPO_ITEM LIKE '%".$tipoitem."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["mes"]) and isset($_POST["unid"]) and isset($_POST["tipoitem"]) and isset($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.VALIDADE LIKE '%".$mes."%') AND (A.CNES LIKE '%".$unid."%') AND (B.TIPO_ITEM LIKE '%".$tipoitem."%') AND (B.ITEM LIKE '%".$item."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; } elseif (isset($_POST["unid"]) and empty($_POST["ano"]) and empty($_POST["mes"]) and empty($_POST["tipoitem"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.CNES LIKE '%".$unid."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["unid"]) and isset($_POST["tipoitem"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.CNES LIKE '%".$unid."%') AND (B.TIPO_ITEM LIKE '%".$tipoitem."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["unid"]) and isset($_POST["tipoitem"]) and isset($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (A.CNES LIKE '%".$unid."%') AND (B.TIPO_ITEM LIKE '%".$tipoitem."%') AND (B.ITEM LIKE '%".$item."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; } elseif (isset($_POST["tipoitem"]) and empty($_POST["ano"]) and empty($_POST["mes"]) and empty($_POST["unid"]) and empty($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (B.TIPO_ITEM LIKE '%".$tipoitem."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; }elseif (isset($_POST["tipoitem"]) and isset($_POST["item"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (B.TIPO_ITEM LIKE '%".$tipoitem."%') AND (B.ITEM LIKE '%".$item."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; } elseif (isset($_POST["item"]) and empty($_POST["ano"]) and empty($_POST["mes"]) and empty($_POST["unid"]) and empty($_POST["tipoitem"])) { $sql = "SELECT * FROM REMANEJAMENTO_ITENS_DISPONIVEIS AS A LEFT JOIN REMANEJAMENTO_ITENS B ON A.ID_ITEM = B.ID_ITEM LEFT JOIN UNIDADES C ON A.CNES = C.CNES LEFT JOIN USUARIOS D ON A.ID_USUARIO = D.ID_USUARIO WHERE (B.ITEM LIKE '%".$item."%') AND (A.VALIDADE < CURDATE()) ORDER BY B.ITEM"; } //caso a consulta apresente falha, exibe mensagem de erro if (!$sql) { echo "<script>alert('Não foi possível executar a consulta: %s\n".$mysqli->error."');</script>"; exit; } $result = mysqli_query($con, $sql); if (mysqli_num_rows($result) > 0) { if (empty($_POST["ano"])){ $ano = "TODOS"; } if (empty($_POST["mes"])){ $mes = "TODOS"; } if (empty($_POST["unid"])){ $unid = "TODOS"; } if (empty($_POST["tipoitem"])){ $tipoitem = "TODOS"; } if (empty($_POST["item"])){ $item = "TODOS"; } if ($_POST["mes"] == "01") { $mes = "Janeiro"; } if ($_POST["mes"] == "02") { $mes = "Fevereiro"; } if ($_POST["mes"] == "03") { $mes = "Março"; } if ($_POST["mes"] == "04") { $mes = "Abril"; } if ($_POST["mes"] == "05") { $mes = "Maio"; } if ($_POST["mes"] == "06") { $mes = "Junho"; } if ($_POST["mes"] == "07") { $mes = "Julho"; } if ($_POST["mes"] == "08") { $mes = "Agosto"; } if ($_POST["mes"] == "09") { $mes = "Setembro"; } if ($_POST["mes"] == "10") { $mes = "Outubro"; } if ($_POST["mes"] == "11") { $mes = "Novembro"; } if ($_POST["mes"] == "12") { $mes = "Dezembro"; } } echo '<div class="alert alert-info" role="alert">Exibindo resultados para os critérios: <br>ANO: '.$ano.' | MÊS: '.$mes.' | UNIDADE: '.$unid.' | TIPO DE ITEM: '.$tipoitem.' | ITEM: '.$item.'</div>'; if (mysqli_num_rows($result) > 0) { ?> <table class="table table-hover table-bordered" style="width: 100%;margin-top: 1%"> <tr style="background-color: #C1CDCD; color: black;"> <th>Data do<br>Registro</th> <th>Unidade</th> <th>Usuário que disponibilizou</th> <th>Tipo de Item</th> <th>Nome do Item</th> <th>Quantidade</th> <th>Lote</th> <th>Validade</th> <th>Valor</th> </tr> <?php while ($row = mysqli_fetch_array($result)){ foreach($row as $key => $values){ $row[$key]= utf8_encode($values); } $valor = $row["VALOR"]*$row["QTD"]; $valor = "R$ ".round($valor,2); ?> <tr style="background-color:white;"> <td><?php echo dataTela($row["DATA_REGISTRO"])?></td> <td><?php echo $row["NOME_UNIDADE"]?></td> <td><?php echo $row["NOME_USUARIO"]?></td> <td><?php echo $row["TIPO_ITEM"]?></td> <td><?php echo $row["ITEM"]?></td> <td><?php echo $row["QTD"]-$row["QTD_SAIDA"]?></td> <td><?php echo $row["LOTE"]?></td> <td><?php echo dataTela($row["VALIDADE"])?></td> <td><?php echo $valor?></td> </tr> <?php } ?> </table> <?php }else{ echo '<br><div class="alert alert-danger" role="alert">Atualmente não constam itens disponibilizados por outras unidades com estes critérios!</div>'; } } ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.