~TiuTalk~ 7 Denunciar post Postado Agosto 30, 2009 Fala gente :) Tenho uma tabela relacional com três campos: id int(11) AUTO_INCREMENT (PRIMARY_KEY) categoria_id int(11) pacote_id int(11) E suponhamos que eu tenha três registros nelas com IDs iguais a 3, 8, e 9.. Eu preciso reorganizar esses IDs para o menor valor possível... voltando a ser 1, 2 e 3. Existe uma forma de fazer isso? Ps.: Eu não preciso me preocupar em manter a ordem dos registros ou o valor atual dos IDs. Só pra ilustrar com outro exemplo, suponto que eu tenha uma tabela assim (o primeiro valor é a coluna ID): 2, TiuTalk, blablabla 4, Fulano, lalala 10, Ciclano, tralalá Queria que ela ficasse assim: 1, TiuTalk, blablabla 2, Fulano, lalala 3, Ciclano, tralalá Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Renan 2 Denunciar post Postado Agosto 31, 2009 me diz uma coisa, isso é uma tabela de relacionamento? pq você precisa que os valores sejam "diminuídos"? Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Agosto 31, 2009 Sim... é uma tabela de relacionamento entre duas outras tabelas... Eu preciso que eles sejam diminuidos pq o campo é INT(11), eu sei q posso aumentar o número máximo de caracteres, mas sei que cedo ou tarde eu vou chegar no limite já que quase todos os registros são re-inseridos com REPLACE INTO todo dia e tão crescendo absurdamente. Pode só ser uma preocupação boba, mas queria saber como fazer, mesmo que eu não o faça. :P Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Renan 2 Denunciar post Postado Setembro 1, 2009 entao.. até aonde vai meu conhecimento... você teria que criar essa tabela de relacionamento, sem essa PK de auto incremento.. e com uma PK composta com os dois campos... mais ou menos assim: CREATE TABLE `rel_categoria_pacote` ( `categoria_id` INT UNSIGNED NOT NULL, `pacote_id` INT UNSIGNED NOT NULL, PRIMARY KEY (`categoria_id`, `pacote_id`) ) ENGINE = InnoDB; e com suas devidas FKs. Teoricamente, dessa forma, você não precisa se preocupar com o valor do auto incremento que estava se preocupando antes, a tabela será um pouco menor e está garantindo a integridade dos dados, já que a chave primária composta garante que não haverá relacionamentos duplicados entre pacores e categorias. Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Setembro 2, 2009 Hmm.. Interessantíssimo! A tabela precisa ser InnoDB pra poder fazer uma PK "dupla"? Ou rolatira também com MyISAM? :D Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 2, 2009 ~Til Talk~ 11 permite indexar até 99.999.999 que não é pouca coisa.Precisa mesmo não ter "banguelas" ? Recriar estas tabelas vai dar trabalho, acho que talvez seja melhor : 1) Ver pq se está perdendo as faixa de valores e se possível corrigir 2) Pensar uma rotina que aproveitasse as "banguelas" , caso seja possível pois pode haver problemas de datas x registros. Assim ao se inserir um novo registro o '1' poderia ser aproveitado usando o seu exemplo. Mas caso queira reindexar o algoritmo básico é (grosso modo) Desligar todas as pk´s fk´s e uk´s que envolvam este campo Enquanto houver "banguelas" faça __Obter o registro mais baixo não migrado __Verificar se existe registro mais baixo que ele livre __Alterar este registro em todas as tabelas envolvidas. Fim enquanto Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Renan 2 Denunciar post Postado Setembro 2, 2009 Hmm.. Interessantíssimo! A tabela precisa ser InnoDB pra poder fazer uma PK "dupla"? Ou rolatira também com MyISAM? :D A PK Composta funciona em tabelas do tipo MyISAM também, eu sugeri InnoDB por causa das FKS =] Compartilhar este post Link para o post Compartilhar em outros sites