Tenho uma tabela onde os registros estarão em forma de estrutura. Exemplo …
Id - Nome - PaiId
1 - Jose - 1
2 - Maria - 1
O registro do José tem o ID = 1 e como ele não tem um registro pai, o campo Pai ID é igual ao seu ID. No caso da Maria,o ID = 2 e o pai = 1, pois ele é o registro pai.
Como capturar o valor do campo ID, uma vez que ele é auto incremento, para que no insert eu coloque o mesmo valor no campo pai, quando necessário.
Pelo que entendi você quer que o registro tenha ‘id’ e ‘PaiId’ iguais, caso o mesmo não tenha um registro pai, se for este o caso…
1° Como o campo Id é auto_increment você precisa saber qual será o id do próximo registro a ser inserido, para isso faça:
select (max(Id) + 1) from tabela;
O valor retornado será o próximo id e também o PaiId caso o registro não tenho um registro pai
2° Insira o valor retornado no insert
Infelizmente não da para fazer com um comando só, por exemplo:
insert into tabela (id, nome, PaiId)
values ( default, 'Marcos', (select (max(id) + 1) from tabela));
O MySQL retorna o seguinte erro:
Error Code: 1093. You can’t specify target table ‘tabela’ for update in FROM clause
Eu sugiro definir um valor padrão para o campo PaiId para o caso do registro não ter um registro pai, por exemplo:
Na construção da tabela…
PaiId int default -1
Obrigado por responder, mas não posso usar esse comando de MAX, pois se por um acaso se o ultimo registro for deletado, no MAX será um numero e o auto incremento outro numero.
Você tem razão, mas em uma pesquisa na internet encontrei algo que poderá te ajudar:
O seguinte comando retorna o próximo número do auto_increment da tabela:
select auto_increment from information_schema.tables where table_name = 'nome_da_tabela' and table_schema = 'nome_do_banco';
Então para resolver o seu problema faça:
insert into tabela
(Id, nome, PaiId)
values
(default, 'Jorge',
(select auto_increment from information_schema.tables where table_name = 'nome_tabela' and table_schema = 'nome_banco'));
Você pode fazer um select assim
SHOW TABLE STATUS LIKE 'nome_da_tabela'
#A informação que você procura está na coluna 11 dessa consulta
Essa consulta retorna as informações da tabela definida após o comando LIKE.
É igual a solução do amigo @gabrielcardoso, só que com muito menos código.
1 curtida
Boa tarde amigo, blz?
Estou com esse mesmo problema e cheguei nesse tópico, quando dou esse comando ele me trás várias informações junto, tem como eu retornar apenas o valor do Auto_increment?
Desde já agradeço
Em pleno 2020 e essa resposta salvou meu dia. Obrigado!