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 ==

5 réponses

cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
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
9
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
9
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