Problème avec l'auto-incrémentation

Résolu
Dragonblood Messages postés 21 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 30 août 2006 - 28 août 2005 à 08:06
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 30 août 2005 à 17:34

15 réponses

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
29 août 2005 à 22:56
Hep Guillemouze,



J'aurai bien envie de te permettre... J'aurai même envie de cliquer sur le bouton "Réponse acceptée". Mais a peu pas!



Je laisserai alors le soin a DragonBlood de le faire.



bisou
3
Dragonblood Messages postés 21 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 30 août 2006 1
28 août 2005 à 08:09
Bonjour,

J'utilise Easy PHP et j'ai un problème. Dans mes tables, il y a toujours un champs ID qui s'auto-incrémente à chaque fois que je rajoute des informations. Le problème c'est que lorsque je veux supprimer une information, l'ID ne revient pas à sa valeur antérieur mais continue de s'incrémenter. Y'a t-il un moyen pour l'obliger, lorsque je supprime une ligne complète,de revenir à sa valeur antérieur ?

Merci de me répndre.
++
0
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
28 août 2005 à 08:31
Lu, alors tu peux faire ca :



mysql_query(' DELETE `ma_table` WHERE id=' . $id); // On supprime l'enregistrement $id


mysql_query(' UPDATE `ma_table` SET id=id-1 WHERE id<' . $id); // On decremente les enregistrement superieurs

mysql_query(' ALTER TABLE `ma_table` '); // On défragmente la table (auto incremente au minimum (x données dans la table))


Voila
<hr>Si ma reponse te convient, merci de l'accepter !
0
Dragonblood Messages postés 21 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 30 août 2006 1
28 août 2005 à 09:32
Oui merci mais je pensais plutôt le faire directement dans PHP My admin. Lorsque je supprime une table directement dans PHP My Admin, il ya une valeur qui s'appelle autoindex (il me semble). J'aimerais pouvoir controler CE PARAMETRE.

mais merci quand même...

++
0

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

Posez votre question
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
28 août 2005 à 10:11
Moi j'ai une question pour Jojo... peux-tu m'expliquer l'effet de mysql_query(' ALTER TABLE `ma_table` ') ? Je ne comprends pas ce que tu entends par défragmenter...



Merci! ++




*****
THINK -> SEEK -> ASK
0
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
28 août 2005 à 10:19
Alors,

Disons que tu as 10 enregistrements.

Tu supprime le 9eme, mais l'autoincrement reste à 11 (10+1). Et si je fais un ALTER TABLE `ma_table` mon autoincremente retombe à dernier_autoinvremente_existant+1

C'est dans Operation dans PhpMyAdmin :D
<hr>Si ma reponse te convient, merci de l'accepter !
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
28 août 2005 à 10:24
voili voila!



Thanx






*****
THINK -> SEEK -> ASK
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
28 août 2005 à 12:40
En même temps, l'auto incrémentation est fait justement pour n'avoir
que des valeurs uniques, pas pour remplacer celle qui ont existées !
0
Dragonblood Messages postés 21 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 30 août 2006 1
28 août 2005 à 20:13
En fait j'ai fait une table avec la liste du personnel (nom, prenom) j'ai rajouté le champ ID pour toujours avoir le nombre exact de personne. Donc losque je rajoute une personne, le champ ID s'icrémente de 1. Mais imaginons que j'ai une liste de 20 personnes, la 13ème est en congé donc je la supprime, je me retrouve donc avec un "trou" dans mon tableau puisque les ID suivants restent fixes.
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
29 août 2005 à 00:36
ca depend de comment tu veu prendre ton probleme, mais a ta place, je
mettrai pas d'autoincrement, et je ferai comme la dis jojo pour les
suppressions :

UPDATE `ma_table` SET id=id-1 WHERE id<' . $id

(ou $id est l'id de celui que tu vien de supprimer)

puis pour les insertions tu met

INSERT INTO `ma_table`(id, nom, prenom) SELECT MAX(id)+1, 'Durand', 'Michel' FROM `ma_table`;

en mettant 1 a la place du max si ta table est vide, et eventuellement en mettant une contrainte CHECK id <= 20 dans ta table

enfin je connai pas assez precisement ton probleme pour taider +
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
29 août 2005 à 21:53
Salut,



Euh ,si je peux... C'est une erreur de conception de vouloir utiliser
l'ID pour savoir combien de personne se trouve dans ta base!



Garde ton auto-increment comme il est. Le principal interet est que si
tu utilise l'ID ailleur comme clef étrangère est que tu modifie cet ID
dans ta table... Ca va te bousiller toutes les correspondances.



exemple:

Personnel : IdPersonnel=12, Nom=Josie, ...

Personnel : IdPersonnel=13, Nom=Marcel, ...

...

Tache : IdTache=465798, Type="Condiure conférence", IdPersonnel=12



Ben là, c'est Josie qui dirige la conf.

Pis tu la vires bicoze elle arrive à la fin de son CNE. tu décale les
ID. Ben du coup, c'est Marcel qui à dirigé la conf (à moins que tu te
tapes toutes les tables pour modif les IdPersonnel)



Fait simplement "SELECT count(IdPersonnel) AS NbEmployer FROM Personnel" Et puis roule...
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
29 août 2005 à 22:02
si je peu me permettre J_G, tu te trompes !!!

si tu cree ta table comme ca :



CREATE TABLE Personnel (

IdPersonnel int PRIMARY KEY,

Nom varchar,

...

)



CREATE TABLE Tache (

IdTache int PRIMARY KEY,

Type varchar,

IdPersonnel int,

CONSTRAINT fk FOREIGN KEY IdPersonnel REFERENCES personnel ON DELETE SET NULL ON UPDATE CASCADE

)



alors la tache sera affectee a personne si tu supprime la personne
correspondante, ou la cle sera mise a jour si modification il y a.
0
Dragonblood Messages postés 21 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 30 août 2006 1
30 août 2005 à 09:15
Ok d'accord. Je m'avoue vaincu. Finalement je vais laisser l'ID tel quel.Merci de vos réponse.
++
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
30 août 2005 à 12:05
???



C'est pas ma réponse qu'il fallait accepter, mais celle de Guillemouze.



Enfin bon, merci ;)
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
30 août 2005 à 17:34
:'(



DELETE FROM reponse_acceptee WHERE topic='Problème avec l\'auto-incrémentation' AND name='J_G' AND num_msg=13;

INSERT INTO reponse_acceptee(name, topic, num_msg) VALUES('Guillemouze', 'Problème avec l\'auto-incrémentation', 12);



j'espere que ca va marcher
0
Rejoignez-nous