MiguelTb 2 Denunciar post Postado Abril 14, 2011 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
jpraminelli 3 Denunciar post Postado Abril 14, 2011 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
MiguelTb 2 Denunciar post Postado Abril 14, 2011 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
gremio10 14 Denunciar post Postado Abril 14, 2011 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
William Bruno 1501 Denunciar post Postado Abril 14, 2011 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
Diego Garcia 0 Denunciar post Postado Abril 14, 2011 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
mangakah 217 Denunciar post Postado Abril 14, 2011 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
William Bruno 1501 Denunciar post Postado Abril 14, 2011 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
MiguelTb 2 Denunciar post Postado Abril 14, 2011 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
mangakah 217 Denunciar post Postado Abril 14, 2011 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
MiguelTb 2 Denunciar post Postado Abril 14, 2011 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
mangakah 217 Denunciar post Postado Abril 14, 2011 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
MiguelTb 2 Denunciar post Postado Abril 14, 2011 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