Comment renuméroter automatiquement des ID? - PHP - Programmation
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) ...
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.
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
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...
Marsh Posté le 12-09-2005 à 11:05:47
bha si il trouve rien, tu relance la requète ...
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
Marsh Posté le 12-09-2005 à 11:07:49
C'est qu'il y a alors un problème de conception dans l'application
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"
Marsh Posté le 12-09-2005 à 11:08:42
un drop de ta colonne auto_increment, puis tu le recrees ensuite ?
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.
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!
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
Marsh Posté le 21-01-2010 à 13:00:59
Ouvres un autre topic! Bonjour le déterrage, là
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!
Merci.