Ir para conteúdo

Arquivado

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

WilliamRodrigues

[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.

Compartilhar este post


Link para o post
Compartilhar em outros 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".

Compartilhar este post


Link para o post
Compartilhar em outros 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...

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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;
}

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.