Utiliser AUTO_INCREMENT en MySQL tout en n'ayant pas de trous dans le champs...

cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007 - 21 août 2005 à 09:38
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 21 août 2005 à 11:46
Hi all
J'ai une DB MySQL avec une table qui contient le champs ID en AUTO_INCREMENT. Le soucis, c'est que quand on supprime une entrée dans la table, ça fait un trou dans le champ ID, par exemple $ID=1, $ID=2, $ID=4, quand on a supprimé le 3.
Est-ce possible que lors d'une supression, tout les champs ayant un ID suppérieur à celui supprimé voient leur ID soustrait de 1 pour ne jamais avoir ces trous ? (sans devoir faire une routine de boucle qui se charge de faire ça...)

@Z3RtY25 ==
A voir également:

5 réponses

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 août 2005 à 10:42
Salut,



bah lorsque tu supprimes un id : DELETE FROM table WHERE id=machin



ensuite :



UPDATE table SET id=id-1 WHERE id>machin

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
21 août 2005 à 11:12
Oui, mais il ne faut pas oublier de changer AUTO_INCREMENT, car si un champ est ajouté, y'aura encore un trou avec cette fois un décalage de 2 s'il supprime encore une entrée.

===========
ViewVite XP : HTML
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 août 2005 à 11:15
ouais c'est vrai, ALTER TABLE autoincrement=autoincrement-1



je ne sais pas si mysql interprètera ça, si il ne l'interprète pas il
faut passer par le maximum+1 de l'id et faire un alter table
autoincrement=max

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
21 août 2005 à 11:43
Merci pour vos réponse :)
Mais pour UPDATE table SET id=id-1 WHERE id>machin, il faut quand même passer par une boucle non ? Car il peut y avoir 100,1000 champs après l'ID qu'a été supprimé.
Anthomicro, j'ai pas trop compris ton dernier message :(

@Z3RtY25 ==
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 août 2005 à 11:46
"Mais pour UPDATE table SET id=id-1 WHERE id>machin, il faut quand même passer par une boucle non ?"



Non, une seule requête suffit si tu supprimes un champ, après si t'en
supprime 1000 bah tu mets une variable qui compte le nombre de champs
supprimés :



'UPDATE table SET id=id-'.$variable.' WHERE id>machin'


ensuite pour mon dernier message il faut que le prochain id soit bien
l'id maximum+1 donc une fois le nombre de champs comptés (et enlevés)
il faut bien définir un prochain id (le prochain enregistrement inséré
aura cette valeur) et donc pour modifier l'autoincrement on fait une
requête ALTER TABLE nom_table AUTOINCREMENT=valeur



ou valeur est la prochaine valeur de l'id du futur enregistrement inséré


<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
Rejoignez-nous