Problème avec l'auto-incrémentation [Résolu]

Signaler
Messages postés
21
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
30 août 2006
-
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-

15 réponses

Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
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
Messages postés
21
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
30 août 2006
1
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.
++
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
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 !
Messages postés
21
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
30 août 2006
1
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...

++
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
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
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
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 !
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
voili voila!



Thanx






*****
THINK -> SEEK -> ASK
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
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 !
Messages postés
21
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
30 août 2006
1
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.
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
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 +
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
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...
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
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.
Messages postés
21
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
30 août 2006
1
Ok d'accord. Je m'avoue vaincu. Finalement je vais laisser l'ID tel quel.Merci de vos réponse.
++
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
???



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



Enfin bon, merci ;)
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
:'(



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