Jump to content
Sign in to follow this  
William F. Rodrigues

[Resolvido] Gerar numero sequencial que zera todo ano

Recommended Posts

Estou com problemas em criar um numero sequencial que zere sua contagem todo ano, esse numero serve de protocolo.

No banco de dados tenho um campo auto incremento, mas preciso desse numero pois é o padrão que é usado aqui para identificação.

 

Ficaria assim 125 de 2011 virou o ano começa do um 1 de 2012.

No campo numero_protocolo fica salvo o numero sem o ano, tenho outro campo para o ano.

 

Já até consegui fazer isso, faço count(ano) nos registro do ano atual e somo + 1, o problema vem agora.

 

Se for excluído 1 registro, pode ser que duplique o numero. Por exemplo:

Tenho 4 registro no ano, foi excluído o 3 o próximo numero sera 4 duplicando assim esse numero.

 

Preciso fazer com que mesmo se eu excluir um numero a sequencia ira continuar certa.

Share this post


Link to post
Share on other sites

Não use a função COUNT(ano), use a função MAX(numero_protocolo)+1.

A questão de zerar o número na troca do ano continua sendo "manual".

Share this post


Link to post
Share on other sites

Obrigado Prog.

 

Com o max gerou o mesmo resultado.

 

Como disse da maneira que estou fazendo ele zera automático na troca de ano, pois uso count ou no caso o max como você disse restringindo aos registro com o ano igual ao atual.

 

Ex: select count(numero_protocolo) from tabela where ano = 2012.

 

Assim mesmo que tenha vários registros em 2011, o select vai me dar o numero de registros de 2012. Assim somo + 1 nesse resultado. Com isso o numero é zerado automático todo ano.

 

Meu problema é que preciso deixar a opção de excluir registros a alguns usuários, ai começa meus problemas.

 

Se for excluído um registro que não seja o ultimo inserido vai duplicar o ultimo numero.

 

Isso não pode acontecer...

Edited by William F. Rodrigues

Share this post


Link to post
Share on other sites

Realmente não acontece, ele vai pegar o maior valor.

 

E no caso da restrição que faço por ano, para poder zerar o numero a cada ano, a função max vai me retornar null quando virar o ano, devido a não ter nenhum registro nesse condição.

 

Agora é só tratar quando vier null.

 

Obrigado Prog pela ajuda.

 

Resolvido.

Edited by William F. Rodrigues

Share this post


Link to post
Share on other sites

Ressucitando...

 

Vc resolveu seu problema assim ??

 

 

//PEGANDO MAX NUMERO
$stmt = $mysqli->prepare("SELECT MAX(num) as id from tbl_protocolos where ano = ?");
$stmt->bind_param('i', $ano);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows == 0){ // NAO ACHOU ENTAO TEMOS QUE RECOMEÇAR A CONTAGEM
$stmt->close();
$prox_numero = 1;
}
else{ ACHOU , ACRESCENTAMOS 1
$stmt->bind_result($num_atual); // VALOR ATUAL DO NÚERO
$stmt->fetch();
$stmt->close();
$prox_numero = $num_atual + 1;
}

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
Sign in to follow this  

×

Important Information

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