Comment renuméroter automatiquement des ID?

Comment renuméroter automatiquement des ID? - PHP - Programmation

Marsh Posté le 12-09-2005 à 10:54:19    

Bonjour,
je cherche simplement à renuméroter un champ ID auto_increment
 
mon probleme est que de temps en temps je supprime une ligne de la table. du coup le champ id a un "trou"
ex: 1, 2, 3, 5,6 etc.

Ma question
: est ce qu'il existe une fontion sql qui permet de modifier un champ auto_increment pour qu'il n'y est plus ces fameux trou?
 
Je pourrais le faire a la main, mais si je décale les id (ex precedent: le 5 devient 4 et le 6 ->5) l'id suivant qui sera généré automatiquement sera 7 alors que moi je voudrais qu'il devienne 6.
 
Je sais pas si je m'exprime clairement! :whistle:  
 
Merci.

Reply

Marsh Posté le 12-09-2005 à 10:54:19   

Reply

Marsh Posté le 12-09-2005 à 10:56:35    

Pourquoi tu veux faire ça ?
Ya pas vraiment d'intérêt (à part pour faire joli) ...

Reply

Marsh Posté le 12-09-2005 à 10:57:40    

ouaip perso je vois vraiment pas l'interet

Reply

Marsh Posté le 12-09-2005 à 10:58:32    

avec mysql, on peut le faire (voir la doc de mysql pour plus de precision, moi, je l'ai jamais fait à la main)
pour les autres bases de données, j'en ai aucune idée.

Reply

Marsh Posté le 12-09-2005 à 10:58:35    

auto_increment sert à donner un chiffre unique à une ligne, on s'en fout complètement s'il y a des trous ou non...
 
Pour gérer un vrai numéro d'ordre sans trou, bah faut le gérer dans ton prog.... genre dès que tu supprimes un élément, tu décales les éléments suivants avec un p'tit update... Bien sûr il te faudra un autre champ de type INT

Reply

Marsh Posté le 12-09-2005 à 11:00:07    

si, parce que j'affiche le resultat d'une ligne en fontion d'un ID aleatoire sur une de mes pages. Donc quand il y a un trou, il ne peut rien m'afficher...


Message édité par nombril le 12-09-2005 à 11:03:09
Reply

Marsh Posté le 12-09-2005 à 11:05:47    

bha si il trouve rien, tu relance la requète ...


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 12-09-2005 à 11:05:58    

tu peux extraire un id existant dans ta table de maniere aleatoire ou bien adopter la technique preconisee par FlorentG

Reply

Marsh Posté le 12-09-2005 à 11:07:49    

C'est qu'il y a alors un problème de conception dans l'application [:spamafote]
 

Reply

Marsh Posté le 12-09-2005 à 11:08:33    

ok, donc faut que je gere ça avec le php quand je supprime une ligne.
C'est tout ce que je voulais savoir.  
Merci
 
PS: je vais voir dans la doc mysql "omega2"

Reply

Marsh Posté le 12-09-2005 à 11:08:33   

Reply

Marsh Posté le 12-09-2005 à 11:08:42    

un drop de ta colonne auto_increment, puis tu le recrees ensuite ?

Reply

Marsh Posté le 12-09-2005 à 11:20:14    

voilà requette :
ALTER TABLE matable AUTO_INCREMENT = 15;
 
Mais ca ne marcherait qu'avec des tables de types myisam. pour les innodb, il faut couper et redémarrer mysql pour qu'il reprenne l'id maximum comme départ du prochain auto_increment.
 
Enfin bon, de toute maniére, dans ton cas, il vaut mieux que tu le géres directement dans le programme plustôt que d'utiliser une telle bidouille vu que c'est une opération que tu feras (trés) souvent.
la modification de l'auto_incerment automatique est une opération de maintenance qui ne doit être faite que couplé à un tassement des id et ce en cas de risque d'atteinte de l'id maximum possible dans la colone.

Reply

Marsh Posté le 12-09-2005 à 11:20:17    

ok je m'y attele  :)
 
edit:  
ALTER TABLE matable AUTO_INCREMENT = 15; ça marche impecable. merci beaucoup!


Message édité par nombril le 12-09-2005 à 11:27:44
Reply

Marsh Posté le 21-01-2010 à 12:08:36    

Bonjour,
J'ai 3 tables innodb liées dont la première stocke des documents (modèles et documents).
Chaque documents composées de zones, chaque zone composée d'un paramétrage.
L'ajout d'un document copie le modèle sous un autre Id et devient un document.
 
15 modèles composés en moyenne de 50 zones composées en moyenne de 5 paramétrages
300 personnes vont quotidiennement créer 7 documents   (Id en Int(5) et NumAuto ça à l'air court)
 
et voici enfin ma question :
L'ordre des zones doit être paramétrable, alors j'utilise un champ numérique 'Ordre' dans la table 'Zones'.
Si malheureusement j'arrive à un cas comme  10,20,30,33,34,35,40,etc
Et que je voudrais Renuméroter en 10,20,30,40,50,60,70,80,etc  (pour pouvoir insérer d'autres zones entre 33 et 34)
 
En une seule requête ?  Des idées ?
Pour l'instant je vais faire    update Zones set Ordre=Ordre*2 where Doc=$IdDoc
 
Merci


---------------
http://www.chrisweb.be
Reply

Marsh Posté le 21-01-2010 à 13:00:59    

Ouvres un autre topic! Bonjour le déterrage, là :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed