Ir para conteúdo

Arquivado

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

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;	
}

 

 

 

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

  • Conteúdo Similar

    • Por mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
    • Por Luiz Henrique
      Olá pessoas,
       
      Tenho uma classe e dentro dela várias chamadas para métodos de acordo com a necessidade em outra classe (para obter dados DB), como são muitas e vou duplicar os arquivos, para ganhar tempo queria colocar o nome da classe em uma variável porém não funciona.
       
      use Class1; class Class2 { public $className = 'Class1'; ... $dados = $this->className::function(); // não funciona } Era para gerar isso:
      $dados = Class1::function();
      Se eu der um echo $this->$className, ele me retorno o nome da Class1 porém para executar um método dentro da Class1 não vai, diz que a classe Class1 não existe!
      Tem alguma forma de funcionar isso?
       
      Obrigado.
    • Por ernestovm
      Bom dia.
      Descobri, depois de muito trabalho, um problema esquisito. Tenho duas imagens que chamam funções JavaScript determinadas. Uma funciona e a outra não. Isso no Firefox. No Chrome as duas funcionam perfeitamente. Alguém conhece alguma gambiarra para fazer o Firefox funcionar? Segue os códigos:
      HTML:
      <img src="images/ic_abrir.png" width="70" height="70" onClick="abre_notificacao(<? echo "'".$us_codigo."','".$item."'"; ?>);" style="cursor:pointer" id="p_imagem-<? echo $item; ?>" name="p_imagem-<? echo $item; ?>">
       <img src="images/ic_excluir.png" width="70" height="70" onClick="excluir_notificacao(<? echo "'".$us_codigo."'"; ?>);" style="cursor:pointer">
      JAVASCRIPT:
      <script type="text/javascript">
          function abre_notificacao(codigo,indice) {
              $("#p_imagem-"+indice).attr("src","images/ic_abrir_ok.png");
              $("#ver-"+indice).css("display", "block");
          }
          function excluir_notificacao(codigo) {
              $.post("excluir_notificacao.php", {codigo: codigo}, function(resposta) {
                  confirm(resposta+" ("+codigo+")");
              });
              location.reload();
          }

      </script>
      A Função abre_notificacao(codigo,indice)  funciona perfeitamente nos dois browsers.
      A Função excluir_notificacao(codigo) só funciona no Chrome.
      Obrigado pela luz
    • Por unset
      Olá, estou começando a usar o twig template e estou com uma dúvida e não encontrei a resposta também não sei se é possível mais espero que seja possível
       
      Bom eu tenho um arquivo com várias funções, como eu faço para chamar essas funções no HTML?
       
      Não funciona assim {{ funcao() }}
    • Por Luiz Henrique
      Olá,
      Existe alguma forma de executar a função dentro da mesma?
      EX:
       
      function pai(){
          pai();
      }
       
      Obrigado.
×

Informação importante

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