Ir para conteúdo

Arquivado

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

Felipe Gusmão

Comparar valores, escolher o menor e incrementar +1

Recommended Posts

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")


....


....


Compartilhar este post


Link para o post
Compartilhar em outros sites
SET @idmil = 1;
UPDATE mil SET teste=LEAST(A,B,C) where ID = @idmil;
UPDATE mil SET A= A+1 WHERE A=teste ;
UPDATE mil SET B= B+1 WHERE B=teste ;
UPDATE mil SET C= C+1 WHERE C=teste;
/*para visualizar na tela*/
SELECT ID,guerra,A,B,C FROM mil WHERE  ID=@idmil; 

Estava desenvolvendo, mas parei nesse código.

Tem muita coisa pela frente... como nunca mexi com programação, está muito difícil, estou lendo pra caramba, vendo exemplos, etc, e consegui desenvolver até aí.

se os valos de A, B, e C, forem por exemplo 1,5 e 10, o código vai incrementar +1 no menor, que é A, ficando 2,5,10 , executando novamente, 3,5,10, novamente, 4,5,10, novamente 5,5,10. o problema é que quando chega a 5,5,10, ele incrementa os dois menores, ficando 6,6,10, até chegar em 10,10,10, daí incrementa as três.

Quero que incremente apenas 1 a cada execução. Se os valores forem iguais, selecionar UM DOS VALORES IGUAIS. Aí que entra a complicação.

Se alguém puder dar um help. vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites


SET @idmil = 1;

UPDATE mil SET teste=LEAST(A,B,C) WHERE ID=@idmil;

#IF (ultimo=A AND B=C),

UPDATE mil SET ultimo='A', A=A+1 WHERE ID=@idmil AND A=teste AND ultimo<>'A' AND (ultimo='B' OR ultimo='C');

UPDATE mil SET ultimo='B', B=B+1 WHERE ID=@idmil AND B=teste AND ultimo<>'B' AND (ultimo='A' OR ultimo='C');

UPDATE mil SET ultimo='C', C=C+1 WHERE ID=@idmil AND C=teste AND ultimo<>'C' AND (ultimo='A' OR ultimo='B');

/*para visualizar na tela*/

SELECT ID,guerra,A,B,C,ultimo FROM mil WHERE ID=@idmil;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver usando o mysql com php.

require("conexao.php"); 

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


$consulta = mysql_query("select ultimo from mil where id=1");
$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=1 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=1 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=1 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=1 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=1 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=1 AND ultimo<>'C'") or die(mysql_error());;
echo "ALTEROU 16-20<br />";
	
	}

Thanks

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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