Ir para conteúdo
JhoniWillian

Como comparar duas colunas em uma tabela usando function?

Recommended Posts

Bom dia Galera, estou fazendo um trabalho aqui e estou tendo dificuldades.

 

O que acontece é: eu tenho uma tabela que nessa tabela, irá retornar um select que estou fazendo em um banco de dados MySQL, nesse select eu puxo algumas colunas, dentre elas 4 colunas fundamentais..

 

Que seriam:

Inicio_prev(DATA de incio de produção previsto)  

fim_prev(Data de fim de produção previsto) 

inicio_prod(data de inicio de produção real)

fim_prod(Data de fim de produção real) 

 

Minha ideia é o seguinte: nessa tabela que trará o select com essas informações, gostaria de comparar as colunas: inicio_prev com a inicio_prod, onde, se a coluna da data do inicio_prev for > (maior) que a coluna inicio_prod, ele deve mudar a cor daquela linha para vermelho, informando que aquela ordem de produção não está sendo produzida no seu tempo que era previsto para produzir. porém se a coluna inicio_prev de Produção previsto for > que a inicio_prod de Produção NC MES ele ta pintando a coluna toda e não ta aceitando a validação na function. Hoje a tabela está saindo assim

 

 

OP  Inicio Produção Previsto  Fim Produção Previsto  Inicio Produção NC MES  Fim Produção NC MES

12548749   18/06 10:35   18/06 10:35   18/06 09:35   18/06 09:35

12548749   18/06 10:35   18/06 10:35   18/06 09:35   18/06 09:35

12548749   18/06 10:35   18/06 10:35   18/06 09:35   18/06 09:39

 

Meu código está assim:

 

if($conexao)
    {
        $sql = "SELECT ordem, cod_item, DATE_FORMAT(inicio_prev,'%d/%m %H:%i') as inicio_prev, DATE_FORMAT(fim_orev,'%d/%m %H:%i') as fim_prev, DATE_FORMAT(inicio_prod,'%d/%m %H:%i') as inicio_prod , DATE_FORMAT(fim_prod,'%d/%m %H:%i') as fim_prod FROM pixie_andon_nc where operacao = '00015'"; //Exibir últimos 10 registros, DESC
        $consulta = mysql_query($sql);
        
        
        $inicio = ["inicio_prev"];
        $inicioprod = ["inicio_prod"];


        // Armazena os dados da consulta em um array associativo
        while($registro = mysql_fetch_assoc($consulta))
        {
            echo '<td>'.$registro["ordem"].'</td>';
            echo '<td>'.$registro["inicio_prev"].'</td>';
            echo '<td>'.$registro["fim_prev"].'</td>';
            $color = data_maior_prevista($registro["inicio_prod"]);
            echo "<td style='background: {$color}; color: #444555;'>".$registro["inicio_prod"]."</td>";
            echo '<td>'.$registro["fim_prod"].'</td>';
            echo '</tr>';
        }
        echo '</table>';
    }
        
        function data_maior_prevista()
        {
            if($inicio > $inicioprod)
            {
                $color = "#e60000";
            }
            else
            {
                $color = "#FFF";
            }
            return $color;
        }

Compartilhar este post


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

Minha ideia é o seguinte: nessa tabela que trará o select com essas informações, gostaria de comparar as colunas: inicio_prev com a inicio_prod, onde, se a coluna da data do inicio_prev for > (maior) que a coluna inicio_prod, ele deve mudar a cor daquela linha para vermelho, informando que aquela ordem de produção não está sendo produzida no seu tempo que era previsto para produzir. porém se a coluna inicio_prev de Produção previsto for > que a inicio_prod de Produção NC MES ele ta pintando a coluna toda e não ta aceitando a validação na function. Hoje a tabela está saindo assim

 

 

 

Até onde entendi seu calculo é independente dos demais registros, então podemos quebrar o problema maior em menores...

 

Veja se o exemplo abaixo te ajuda:

 

<?php


//No banco os registros normalmente vem em 'Y-m-d'
$registrosTestes = [
	[
		'id'			=> 1,
		'inicio_prev' 	=> '2017-08-25',
		'fim_prev'		=> '2017-08-24',
		'inicio_prod'	=> '2017-08-10',
		'fim_prod'		=> '2017-08-15'	
	],
	[
		'id'			=> 2,
		'inicio_prev' 	=> '2017-08-20',
		'fim_prev'		=> '2017-08-20',
		'inicio_prod'	=> '2017-08-10',
		'fim_prod'		=> '2017-08-15'	
	]
];

//echo '<pre>';print_r($registrosTestes);
//echo date('Y-m-d');

$timeZone = new DateTimeZone('UTC');
foreach($registrosTestes as $entrega) {
	$inicio_prev = DateTime::createFromFormat ('Y-m-d H:i ', $entrega['inicio_prev'], $timeZone);	
	$fim_prev = DateTime::createFromFormat ('Y-m-d H:i', $entrega['fim_prev'], $timeZone);
	
	if ($inicio_prev >= $fim_prev) {
		echo 'Data de inicio_prev é maior ou igual que data de saida!';
	} else {
		echo 'Data de inicio_prev é menor que data de saida!';
	}
	
}

 

 

A ideia da função é boa mesmo, assim você isola melhor a responsabilidade.

 

function ehInicioPrevMaiorOuIgual(DateTime $inicio_prev, DateTime $fim_prev){
	
	if ($inicio_prev >= $fim_prev) {
		return true
	} 

	return false;	
}

 

 

 

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bem galera, obrigado pela ajuda, fiz isso e deu certo, ele ta validando agora a data maior e só está pintando a coluna que estiver com a data de inicio previsto maior que a data de inicio produzido.

 

pra quem tiver interesse em como ficou:


Obrigado Gabriel e também ao Osmar

while($registro = mysql_fetch_assoc($consulta))
		{
			echo '<td>'.$registro["ordem"].'</td>';
			echo '<td>'.$registro["inicio_prev"].'</td>';
			echo '<td>'.$registro["fim_prev"].'</td>';
			$inicio_prev = $registro['inicio_prev'];
			$inicio_prod = $registro['inicio_prod'];
			
			if ($inicio_prev > $inicio_prod)
			{
				echo '<td>'.$registro["inicio_prod"].'</td>';
			}
			else
			{
				$color = data_maior_prevista($registro["inicio_prod"]);
				echo "<td style='background: {$color}; color: #444555;'>".$registro["inicio_prod"]."</td>";
				
			}				
			echo '<td>'.$registro["fim_prod"].'</td>';
			echo '</tr>';
		}
		echo '</table>';
	}
		
		function data_maior_prevista()
		{
			if($inicio > $inicioprod)
			{
				//$color = "#e60000";
				$color = "#e60000";
			}
			else
			{
				$color = "#e60000";
			}
			return $color;
		}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother sua função não faz sentido, ela não vai funcionar...

 

No seu caso o motivo é a ausência de parâmetros/argumentos.

 

Da uma lida:

https://secure.php.net/manual/pt_BR/language.functions.php

 

<?php

function data_maior_prevista()
{
    //$inicio > $inicioprod não foi definido em nenhum momento.
    if($inicio > $inicioprod)
    {        
        $color = "#e60000";
    }
    else
    {
        $color = "#e60000";
    }
    return $color;
}

 

 

Da uma lida sobre escopo 

http://php.net/manual/pt_BR/language.variables.scope.php

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por PeeWee
      Estou há horas com um problema no meu código, tenho a pagina Auth.php onde há algumas function que funcionam normalmente, porém a seguinte apresenta problemas.
      function getMemberNivel($nivel) {
              $db_handle = new DBController();
              $query = "Select * from members where nivel = ?";
              $result = $db_handle->runQuery($query, 's', array($nivel));
              return $result;
          }
       
      Na Index.php faço a chamada dela da seguinte forma:
       
      $teste = $auth->getMemberByUsername($nivel);
       
      Ocorre que preciso utilizar a variavel $teste, só que exibe erro como se a variavel nao existisse. As demais variaveis vindas da pagina funcionam normalmente. 
      Espero que algum dos colegas possa me ajudar. 
    • Por camargo.2018
      Tou com um erro no meu script e não sei identificar erra pra ele exibir a imagem do usuário mas isso não está acontecendo
       
      Error:

       
      funcao.php:
      function ver_avatar($nick){ include 'str_get_html.php'; $url = "http://pt.clubcooee.com/users/view/".$nick; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); curl_setopt($ch, CURLOPT_TIMEOUT, 15); $return = curl_exec($ch); curl_close($ch); $html = str_get_html($return); $res = $html->find('.m33 img'); $imgLink = $res[0]->attr['src']; return $imgLink; } str_get_html.php:
      <?php function str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) { $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText); if (empty($str) || strlen($str) > MAX_FILE_SIZE) { $dom->clear(); return false; } $dom->load($str, $lowercase, $stripRN); return $dom; } ?> menu.php:
      <div class="usr-nav"> <img src="<?php $veavt = ver_avatar($usr); echo $veavt; ?>" class="img-usr"> <p class="name-usr">Nome do Usuário</p> </div>  
      Me Ajudem mas rápido possível pfvrrrr
    • Por camargo.2018
      Não faz upload de jeito nenhum esse e o código que tentei (Pfvr me ajuda :D):
       
      Html:
      <div class="conteudo">     <form enctype="multipart/form-data" action="?pag=upload-programetes" method="POST">     <input type="hidden" name="MAX_FILE_SIZE" value="999999999999999" />     Enviar novos Programetes: <input name="userfile" type="file" />     <input type="submit" value="Enviar arquivo" /> </form></div> Php:
      if($_GET['pag'] == "upload-programetes"){ $upload = upload_programetes($_FILES); echo $upload; } função:
      function upload_programetes($up){ $uploaddir = $_SERVER["DOCUMENT_ROOT"].'/programetes/'; $uploadfile = $uploaddir . basename($up['userfile']['name']); if (move_uploaded_file($up['userfile']['tmp_name'], $uploadfile)) {     return "Arquivo válido e enviado com sucesso.\n"; } else {     return "Possível ataque de upload de arquivo!\n"; } }  
    • Por guilherme.audi
      Olá, pessoal,
      Sou meio-leigo e logo mais serei vesgo... não entendi onde está o problema:
       
      Tenho uma situação de submenu bem simples, que deve mostrar (display="table") e esconder (display="none") algumas divs, conforme a seleção do usuário.
      No início da página antes do <head> criei a seguinte estrutura:
       
      <!-- CONTROLE DE ABAS :: MENU DETALHES -->
      <script>
          function SelecCarac() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "table";
              dimensoes.style.display = "none";
              projeto3d.style.display = "none";
              videotutorial.style.display = "none";
              esquemafios.style.display = "none";
          }
          function SelecDimensoes() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "none";
              dimensoes.style.display = "table";
              projeto3d.style.display = "none";
              videotutorial.style.display = "none";
              esquemafios.style.display = "none";
          }
          function Selec3D() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "none";
              dimensoes.style.display = "none";
              projeto3d.style.display = "table";
              videotutorial.style.display = "none";
              esquemafios.style.display = "none";
          }
          function SelecVideo() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "none";
              dimensoes.style.display = "none";
              projeto3d.style.display = "none";
              videotutorial.style.display = "table";
              esquemafios.style.display = "none";
          }
          function SelecEsquemaFios() {
              var caracteristicas = document.getElementById('div_carac');
              var dimensoes = document.getElementById('div_dimensoes');
              var projeto3d = document.getElementById('div_3d');
              var videotutorial = document.getElementById('div_video');
              var esquemafios = document.getElementById('div_esquemafios');
              
              caracteristicas.style.display = "none";
              dimensoes.style.display = "none";
              projeto3d.style.display = "none";
              videotutorial.style.display = "none";
              esquemafios.style.display = "table";
          }
      </script>
      (ridiculamente extenso, até suponho que haja um caminho menor..)
       
      As abas desse "submenu" estão no corpo da página (asp clássico) assim:

      <!-- ABAS :: MENU DE DETALHES DO PRODUTO -->
      <div class="container-principal" style="text-align: center;">
          <% if Len(VetProd(97,0)) > 5 Then %>
              <div class="detalhe-menu-abas" id="bt_carac" onclick="SelecCarac()" >Características</div>
          <%End if
          if Len(VetProd(11,0)) > 0 Then %>
              <div class="detalhe-menu-abas" id="bt_dimensoes" onclick="SelecDimensoes()">Dimensões</div>
          <%End if
          if Len(VetProd(92,0)) > 1 Then %>
              <div class="detalhe-menu-abas" id="bt_3d" onclick="Selec3D()">Desenho 3D</div>
          <%End if
          if Len(VetProd(135,0)) > 3 Then %>
              <div class="detalhe-menu-abas" id="bt_video" onclick="SelecVideo()">Video tutorial</div>
          <%End if
          if Len(VetProd(22,0)) > 0 Then %>
              <div class="detalhe-menu-abas" id="bt_esquemafios" onclick="SelecEsquemaFios()">Ligação dos fios</div>
          <%End if%>
      </div>
      <!-- -->
       
      ..E essas id chamadas "div_carac", "div_dimensoes", "div_3d", "div_video" e "div_esquemafios" estão assim:
       
      <!-- DIMENSÕES -->
      <div class="container-principal" style="text-align: center; display: none;" id="div_dimensoes">
          <h3 style="text-align: left;">Dimens&otilde;es<span class="letramed2">&nbsp;(mm)</span></h3>
          <a href="admin/imgs/icones/<%= VetProd(11,0) %>" target="_blank"><img src="admin/imgs/icones/<%= VetProd(11,0) %>" alt="Dimens&otilde;es de <%= VetProd(1,0) %> em mm" title="<%= VetProd(136,0) %>&nbsp;<%= VetProd(2,0) %>&nbsp;<%= VetProd(1,0) %>" class="detalhe-dimensoes"/></a>
      </div>
      <!-- -->
       
      <!-- CARACTERÍSTICAS ESPECIAIS -->
      <div class="container-principal" id="div_carac">
          <h3>Caracter&iacute;sticas especiais</h3>
          <%= VetProd(97,0)%>
      </div>
      <!-- -->
          
      <!-- VÍDEO INCORPORADO  -->
      <div style="background-color: #000000; width: 100%; display: none;" id="div_video">
          <div class="container-principal" style="background-color: black; text-align: center; padding: 1% 0;">
              <iframe class="detalhe-video" src="<%= VetProd(135,0) %>" frameborder="0" allowfullscreen></iframe><br />
              <a href="https://www.youtube.com/user/weightechbrasil/search?query=<%=VetProd(1,0)%>" style="color:#FFFFFF;" title="Veja mais em Youtube/WeightechBrasil" target="_blank" class="submenu"><img src="http://www.weightech.com.br/imgs/site/Logo_Youtube_color_horizontal.png" height="30" title="Canal WeightechBrasil no Youtube" alt="Youtube.com/WeightechBrasil" style="margin-bottom:5px;"/><br>Youtube.com/WeightechBrasil</a>
          </div>
      </div>
      <!-- -->
       
      <!-- PROJETO 3D -->
      <% if Len(VetProd(92,0)) > 1 Then %>
          <div class="container-principal" style="text-align: center; margin-top: 20px; display: none;" id="div_3d">
              <iframe style="width: 100%; height: 680px;" src="<%=VetProd(92,0)%>" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true" frameborder="0"></iframe>
          </div>
      <%End if%>
      <!-- -->
       
      <!-- ESQUEMA DE LIGAÇÃO -->
      <div class="container-principal" style="display: none;" id="div_esquemafios">
          <h3>Esquema de liga&ccedil;&atilde;o dos fios</h3>
          <img src="admin/imgs/icones/<%= VetProd(22,0) %>" alt="Esquema de liga&ccedil;&atilde;o" title="<%= VetProd(136,0) %>&nbsp;<%= VetProd(2,0) %>&nbsp;<%= VetProd(1,0) %>" style="width:90%; max-width:400px;"/>
      </div>
      <!-- -->
       
      Tudo funciona, exceto o VÍDEO INCORPORADO (id="div_video").
      Por quê?!
       
      Obrigado!
    • Por Rendan
      Olá
       
      Sou iniciante e estava tentando criar uma função no postgres que os resultado fosse dinâmico de acordo com os parâmetros passados e assim a clausula where fosse construída testando os campos.
      Minha função da erro justamente na hora que passa a string do select para ser executada. 
       
      A FUNÇÃO:
      CREATE OR REPLACE FUNCTION public.get_auditoria( vcpf character varying DEFAULT NULL, vlogin character varying DEFAULT NULL, vom character varying DEFAULT NULL, vidregistro bigint DEFAULT NULL, vmodulo character varying DEFAULT NULL, vacao text DEFAULT NULL, vip character varying DEFAULT NULL ) RETURNS SETOF record LANGUAGE 'plpgsql' COST 100 VOLATILE ROWS 1000 AS $BODY$ DECLARE txtsql character varying :='SELECT cpf FROM auditoria WHERE 1=1'; BEGIN IF vcpf <> NULL THEN txtsql := txtsql || ' AND cpf=vcpf'; END IF; RETURN QUERY (txtsql); RETURN; END; $BODY$; ALTER FUNCTION public.get_auditoria( character varying, character varying, character varying, bigint, character varying, text, character varying ) OWNER TO postgres; O ERRO:
       
      ERROR: ERRO: erro de sintaxe em ou próximo a "txtsql" LINE 28: RETURN QUERY (txtsql); ^ SQL state: 42601 Character: 487  
       
×

Informação importante

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