antonio.ajsl Postado Abril 28, 2008 Denunciar Share Postado Abril 28, 2008 Caros,Tenho as seguintes tabelas no MySQL 5:GrupoContas - PlanoContasGrupoContasId - int(1),auto incremento, pkNomenclatura - varchar(30)PlanoContasIdGrupoConta - int(1),fk, uniqueCodRed - int(4),auto incremento, pkCodConta - varchar(10),uniqueGropoContas1 ATIVO2 PASSIVO3 DESPESAPlanoContas1 1001 10000000001 1002 11000000001 1003 11100000001 1004 11100000002 2001 20000000002 2002 21000000002 2003 21100000003 3001 30000000003 3002 31000000003 3003 3110000000Como proceder para que o campo 'CodRed'fosse incrementado, mas considerando o campo 'IdGrupoConta'. Quando ovalor de 'IdGrupoConta' for 1, o campo 'CodRed' será incrementado apartir de 1001 até 1999. Quanto for 2, será incrementado a partir de2001 até 2999, e assim sucessivamente.Dá pra implementar isso no MySQL?Agradeço a ajuda Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 28, 2008 Denunciar Share Postado Abril 28, 2008 Como proceder para que o campo 'CodRed'fosse incrementado, mas considerando o campo 'IdGrupoConta'. Quando ovalor de 'IdGrupoConta' for 1, o campo 'CodRed' será incrementado apartir de 1001 até 1999. Quanto for 2, será incrementado a partir de2001 até 2999, e assim sucessivamente.neste caso, o campo CodRed não poderia ser auto-increment, ou seja, você deverá controlar seu incremento. Observando o critério que você mencionou - para cada IdGrupoConta.Por exemplo, se fosse um incremento sequencial por IdGrupoConta, você faria um select obtendo o maior valor de CodRed para o IdGrupoConta em questão:SELECT MAX(CodRed) CodRed FROM GrupoContas WHERE IdGrupoConta = 2supondo que o maior valor retornado fosse 53, você somaria 1 e teria o novo valor -> 54No seu caso, poderíamos dizer que na primeira inclusão você teria 0 como resultado, mas como quer que comece em 2000, então bastaria gerar este valor com IdGrupoConta *1000 (isso resultaria em 2000) que somado ao 1, resultaria no primeiro valor com 2001.Seria algo por ai. Variaria um pouco se você implementar isto no código Delphi ou no banco.Dá pra implementar isso no MySQL?acredito que você poderia utilizar uma trigger para isto, ou eventualmente em um procedure que seria chamada do programa.Acho que vai depender de como você está trabalhando com sua aplicação.Nosso colega Denis Courcy, pode ter mais informações a este respeito e, até mesmo, uma melhor sugestão.Estou movendo para a sessão Banco de Dados->MySQL.Abraços Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Abril 29, 2008 Denunciar Share Postado Abril 29, 2008 Oi, Antonio!O que o Micheus falou está correto.Para que você não precise se preocupar com a inclusão destes dados, criei uma trigger de inclusão de dados que implementa o auto_increment do jeito que você quer.Segue o código abaixo:DELIMITER $$; DROP TRIGGER `test`.`TriggerIncl_PlanoContas`$$ CREATE TRIGGER `test`.`TriggerIncl_PlanoContas` BEFORE INSERT on `test`.`planocontas` FOR EACH ROW BEGIN declare numero integer; Set numero = (select max(CodRed) From planocontas where idGrupoConta = new.idGrupoConta); if (numero <= 0) or (numero is null)then set numero = (new.idGrupoconta * 1000) + 1; else set numero = numero + 1; end if; set new.CodRed = numero; END$$ DELIMITER;$$Um abraço Link para o comentário Compartilhar em outros sites More sharing options...
0 antonio.ajsl Postado Abril 29, 2008 Autor Denunciar Share Postado Abril 29, 2008 Caro Denis,Não sei como agradecer....Muito valiosa a sua ajuda.Funcionou perfeitamente.Grato,Antonio.Oi, Antonio!O que o Micheus falou está correto.Para que você não precise se preocupar com a inclusão destes dados, criei uma trigger de inclusão de dados que implementa o auto_increment do jeito que você quer.Segue o código abaixo:DELIMITER $$; DROP TRIGGER `test`.`TriggerIncl_PlanoContas`$$ CREATE TRIGGER `test`.`TriggerIncl_PlanoContas` BEFORE INSERT on `test`.`planocontas` FOR EACH ROW BEGIN declare numero integer; Set numero = (select max(CodRed) From planocontas where idGrupoConta = new.idGrupoConta); if (numero <= 0) or (numero is null)then set numero = (new.idGrupoconta * 1000) + 1; else set numero = numero + 1; end if; set new.CodRed = numero; END$$ DELIMITER;$$Um abraço Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
antonio.ajsl
Caros,
Tenho as seguintes tabelas no MySQL 5:
GrupoContas - PlanoContas
GrupoContas
Id - int(1),auto incremento, pk
Nomenclatura - varchar(30)
PlanoContas
IdGrupoConta - int(1),fk, unique
CodRed - int(4),auto incremento, pk
CodConta - varchar(10),unique
GropoContas
1 ATIVO
2 PASSIVO
3 DESPESA
PlanoContas
1 1001 1000000000
1 1002 1100000000
1 1003 1110000000
1 1004 1110000000
2 2001 2000000000
2 2002 2100000000
2 2003 2110000000
3 3001 3000000000
3 3002 3100000000
3 3003 3110000000
Como proceder para que o campo 'CodRed'
fosse incrementado, mas considerando o campo 'IdGrupoConta'. Quando o
valor de 'IdGrupoConta' for 1, o campo 'CodRed' será incrementado a
partir de 1001 até 1999. Quanto for 2, será incrementado a partir de
2001 até 2999, e assim sucessivamente.
Dá pra implementar isso no MySQL?
Agradeço a ajuda
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados