Ir para conteúdo

POWERED BY:

Arquivado

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

MiguelTb

Qual melhor forma de pegar o próximo id de uma tabela?

Recommended Posts

Bom dia galera,

 

Estou com um pequeno problema, eu preciso de alguma forma saber qual o próximo ID(primary key, auto increment) que será criado ai inserir um novo registro no banco de dados.

 

Poderia fazer uma forma de buscar o ultimo criado e adicionar + 1. Porém se a pessoa remover o ultimo registro criado, já vai dar problemas. Então preciso descobrir outra forma de ter em uma váriavel o próximo registro que será criado.

 

Alguém me ajuda? =( é urgente.

 

Agradeço desde já galera. Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

depois que você inseriu o registro você pode fazer uma consulta retornando o ultimo

SELECT MAX(id) as cod FROM tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso no caso não serve porque, eu trabalho com a inserção e removação de registros, e mesmo que eu tenha removido após inserir um próximo ele continua de onde parou por exemplo:

 

ID - Registro

1 - a

2 - b

3 - c

4 - d

 

se eu deletar os registros 4 e 3, e criar um novo o id dele será 5 e não 3. E eu gostaria de registrar em uma variável esse valor 5.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu uma inserção, no mysqli tem o

mysqli_insert_id — Retorna o id gerado automaticamente na última consulta

mysql tem o

mysql_insert_id — Obtém o ID gerado pela operação INSERT anterior

PDO tem o

PDO::lastInsertId — Returns the ID of the last inserted row or sequence value

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

o lastInsert não funciona para oque o @MiguelTb qr, se ele não quiser recuperar logo após alguma inserção.

 

a melhor forma que eu encontrei, foi usar um SHOW TABLE STATUS, e pegar o Auto_increment apartir disso.

bem mais confiavel, doq a forma com o MAX()

 

 

http://dev.mysql.com/doc/refman/4.1/pt/show-table-status.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está utilizando qual banco de dados? você está usando campo do tipo auto-incremento? pq não usar uma tabela de contador?

se for firebird é só consultar nas tabelas de generators

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi...

 

Isso é desnecessário e pode causar erros, como por exemplo, você pega o próximo AUTO_INCREMENT e antes de fazer a nova inserção outro usuário a faz na sua frente. Seria necessário dá um LOCK na tabela ao pegar o próximo AUTO_INCREMENT para desbloquear só depois de fazer a inserção.

 

Basta não citar o campo id no camando insert ou então colocar id = 0 que ele automaticamente será criado com o próximo id.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta não citar o campo id no camando insert ou então colocar id = 0 que ele automaticamente será criado com o próximo id.

se ele estiver trabalhando com uma unica tabela sim.

 

eu usei o Auto_increment, num contexto onde eu precisava inserir o próximo ID numa segunda tabela, antes de fazer a inserção na primeira. Por isso que o ->last_insert_id(); não me resolvia.

depende do contexto dele. Seria bacana ele dar mais informações, já que se for uma unica table, é realmente oque você disse @mangakah.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então pessoal, vou tentar essa dica do William com SHOW TABLE STATUS. Aparentemente pela lógica funcionaria. Vou ver como funciona direitinho essa função e depois posto aqui o que aconteceu. Eu tenho 2 tabelas no DB, em 1 fica gravada os empreendimentos e em outra todas as fotos, então queria que as fotos fossem cadastradas com o id do empreendimento na outra tabela, até ai tudo bem o problema é na hora de cadastrar o empreendimento e fazer com que a imagem de exibição do empreendimento já seja cadastrada na outra DB como se fosse uma foto normal desse empreendimento, e nisso que está dando o problema.

 

Se fosse um formulário pra escolher o empreendimento e a foto, era tranquilo. Pois no combobox eu já deixava o value como id do empreendimento!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Miguel, acho que a melhor solução para o seu caso é criar uma terceira tabela chamada relacionamento_empreendimentos_fotos com os seguintes campos:

id_empreendimento

id_foto

 

Use-a para relacionar determinada foto com determinado empreendimento usando as ids.

 

Quando quiser pegar todas as fotos de um empreendimento, basta consultar essa tabela:

SELECT id_foto FROM relacionamento_empreendimentos_fotos WHERE id_empreendimento = $id_empreendimento

 

Depois é só usar esses ids para pegar as fotos.

 

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então @mangakah esse problema está resolvido, eu vou explicar detalhadamente, acho que não consegui me expressar direito:

 

Tenho uma tabela que ficam armazenado todos os empreendimentos.

piucco_empreendimentos

que possui os campos:

id

id_cat

nome

foto

 

e tenho uma tabela que ficam armazenada todas as fotos independente de qual seja o empreendimento. (aqui eu faço a relação com o id do empreendimento (id).

fotos_empreendimentos

id

id_emp (aqui fica registrado o id do empreendimento que a foto representa).

foto

thumb

 

Se o caso fosse fazer uma busca de todos os empreendimentos cadastrados com um botão cadastrar foto não haveria problema pois o empreendimento já está cadastrado e tem um id fixo que iremos fazer a referência.

 

Porém quando vou cadastrar um novo empreendimento, ele não tem um ID ainda, e na hora de cadastrar eu ja cadastro uma foto na outra tabela (fotos_empreendimentos) com o futuro id desse empreendimento que acabei de cadastrar. E aí que está o problema pois da forma que estou fazendo não funciona. Pois eu mando buscar o ultimo registro inserido e adiciona + 1 e insiro o registro no fotos_empreendimentos.

 

Não funciona porque?

O campo id(auto increment) quando deletado ele continua de onde parou. Então o empreendimento que eu cadastrei vamos supor que terá o id 26, só que o registro anterior o id é 20 porque os empreendimentos 21 22 23 24 e 25 foram deletados.

 

Isso vai gerar um registro na tabela fotos_empreendimentos com o id relacionado 21 em vez de ser 26. Teria que arranjar uma forma de buscar o último ID mesmo que deletado da tabela.

 

Não sei se deixei vocês mais confuso hehe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E por que não cadastra primeiro o empreendimento para depois cadastrar a foto? Querer inserir um registro na tabela-filha (´fotos_empreendimentos´) para depois inserir na tabela-pai (´piucco_empreendimentos´) não faz sentido. Inverta essa "lógica" aí e não terá mais esse tipo de problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poisé, acho que será a solução.

 

Eu queria dessa forma, porque a página de leitura do empreendimento tem:

 

nome:

informações

e do ladinho uma galeriasinha de fotos do empreendimento, que eu gostaria que ja tivesse como foto inicial a imagem que escolho pra cadastrar como imagem de exibição do empreendimento na listagem.

 

Mas vou seguir esse conselho mesmo.

 

Vlw.

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.