Ir para conteúdo
Fórum Script Brasil
  • 0

Comparar valores, escolher o menor e incrementar +1


Felipe Gusmão

Pergunta

Olá galera, boa noite...

Sou novo aqui

Estava caçando fórum pois preciso de ajuda...

Esperam que consigam me ajudar

Tenho um banco ('xtudo') com uma simples tabela ('teste') com as seguintes colunas ('nome'[var], 'A'[iNT], 'B'[iNT], 'C'[iNT]) Como faço para fazer uma comparação, ou seja, verificar entre 'A', 'B', e 'C', qual possui o menor valor.

Após verificar, caso haja mais de uma coluna com o menor valor, escolher uma coluna entre as menores e acrescentar +1 ao valor já existente na coluna, caso não haja mais que uma coluna com o menor valor, então acrescenta +1 ao valor já existente na coluna que possui menor valor.

Escolher a coluna que não tenha sido incrementada (+1) na ultima verificação. ex: primeira incrementação = 1º primeira incrementação = 2º ...etc ...

vamos ao exemplo:

NOME A B C

INÍCIO felipe 1 1 1

1º - felipe 1 1 2 (valores de início iguais, então escolhe um valor aleatorio, no caso escolheu C aleatoriamente e incrementou +1)

2º - felipe 2 1 2 (comparou, viu quais os valores menores, dentre A e B escolheu um valor aleatório, no caso, A e incrementou +1)

3º - felipe 2 2 2 (comparou, viu que B possuia menor valor e incrementou +1)

4º - felipe 3 2 2 (comparou todos os valores, todos os valores eram iguais, então escolheu um valor aleatório que não tenha sido o último escolhido, que no caso foi B, então escolheu entre A e C, no caso escolheu A)

5º - felipe 3 3 2 (comparou todos os valores, viu que B e C eram iguais, escolheu um aleatório, já que o último escolhido (A) não estava entre os menores valor, e o escolhido aleatoriamente foi "B")

....

....

Editado por Felipe Gusmão
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

A melhor solução seria fazer uma storage procedure, incluir um cursor para esta tabela, ler cada registro, criticá-lo conforme sua necessidade e atualizá-lo.

Link para o comentário
Compartilhar em outros sites

  • 0

Denis Courcy, obrigado. Vou ler sobre "storage procedure".

Flechaus, rsrs... vou te falar o objetivo.

Existe uma escala de serviço militar que dá muito trabalho fazer de forma manual. Funciona da seguinte maneira.

Existem 3 profissões que dão serviço por dia. Ou seja, por dia deve ter 1 militar de serviço de uma determinada profissão.

O serviço é dividido em horário. Existem 3 horários: 04 as 08, 08 as 12 e 12 as 16.

Cada um dos 3 militares de serviço do dia fica em um determinado horário.

O problema disso tudo é que se um militar estava de serviço na segunda-feira de 04-08, vamos supor que seu próximo serviço seja na sexta-feira, ele não poderá ficar no horário anterior que ele estava de serviço, ou seja, não poderá estar no mesmo horário de 04-08, tem que estar em um horário diferente. Isso quando possível. As vezes tem 3 militares de profissões diferentes que estão de serviço no mesmo dia e que o último horário dos três militares é o de 04-08, e aí alguém terá que repetir o horário de qualquer forma.

Consegui realizar o que quero interagindo mysql com php, porém funciona apenas com 1 militar. Distribui o horário corretamente. Estou estudando os códigos para ver o que posso fazer para realizar comparações com horários de outros militares. Sendo que como estou começando a fuçar em programação agora, está difícil pacas. Estou a 3 dias tentando achar uma ideia. rs...

O que fiz até agora está no código que se segue:

<html>
<head>
<title> Exibindo conteudo da tabela militar </title>
<meta http_equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php

require("conexao.php"); 

ini_set( 'display_errors', true );

error_reporting( E_ALL );


$id = 3;

$consultaa = mysql_query("select a from mil where id='$id'");
$cona = mysql_fetch_array($consultaa);
$consultab = mysql_query("select b from mil where id='$id'");
$conb = mysql_fetch_array($consultab);
$consultac = mysql_query("select c from mil where id='$id'");
$conc = mysql_fetch_array($consultac);


$consulta = mysql_query("select ultimo from mil where id='$id'");
$linha = mysql_fetch_array($consulta);


	if (( $linha['ultimo'] == 'C' ) and ( $cona['a'] <= $conb['b'] )){
mysql_query ("UPDATE mil SET ultimo='A', A=A+1 WHERE ID='$id' AND ultimo<>'A'") or die(mysql_error());;
echo "ALTEROU 08-12<br />";
		
	} elseif (( $linha['ultimo'] == 'C' ) and ( $conb['b'] <= $cona['a'] )){
mysql_query ("UPDATE mil SET ultimo='B', B=B+1 WHERE ID='$id' AND ultimo<>'B'") or die(mysql_error());;
echo "ALTEROU 12-16<br />";		
			
	} elseif (( $linha['ultimo'] == 'A' ) and ( $conb['b'] <= $conc['c'] )){	
mysql_query ("UPDATE mil SET ultimo='B', B=B+1 WHERE ID='$id' AND ultimo<>'B'") or die(mysql_error());;	
echo "ALTEROU 12-16<br />";		
	
	} elseif (( $linha['ultimo'] == 'A' ) and ( $conc['c'] <= $conb['b'] )){		
mysql_query ("UPDATE mil SET ultimo='C', C=C+1 WHERE ID='$id' AND ultimo<>'C'") or die(mysql_error());;
echo "ALTEROU 16-20<br />";

	} elseif (( $linha['ultimo'] == 'B' ) and ( $cona['a'] <= $conc['c'] )){	
mysql_query ("UPDATE mil SET ultimo='A', A=A+1 WHERE ID='$id' AND ultimo<>'A'") or die(mysql_error());;
echo "ALTEROU 08-12<br />";

	} elseif (( $linha['ultimo'] == 'B' ) and ( $conc['c'] <= $cona['a'] )){		
mysql_query ("UPDATE mil SET ultimo='C', C=C+1 WHERE ID='$id' AND ultimo<>'C'") or die(mysql_error());;
echo "ALTEROU 16-20<br />";
	
	}
	require("proximo.php");
?>
	</body>
	</html>
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...