(Résolu) auto incrémentation d'un ID pour phpmyadmin

Eléphanteau du PHP | 49 Messages

17 oct. 2011, 22:59

Bonjour,

Une question ridicule, dans la création d'une table, peut-on mettre un numéro comme celui ci-dessous en gras ?
ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2011-000 ;
J'ai essayé bien sur, mais ça ne fonctionne pas comme ACCESS (par exemple)... :x
Donc ma question, comment peut-on créer ses propres numéros ID ?

Ou puis-je trouver ma source ?

Merci
Modifié en dernier par brother le 18 oct. 2011, 12:57, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 oct. 2011, 23:17

Le problème c'est que "2011-000" c'est pas un nombre, donc pas d'auto-increment possible. D'autant que je suppose que ton objectif est d'avoir un incrément qui se réinitialise chaque année (chose que l'auto increment ne saura pas faire) ?

Il te faut donc gérer ce numéro toi même, à la place - voire en plus - d'un id géré par auto-increment..
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2577 Messages

18 oct. 2011, 09:29

Sauf erreur de ma part, il est possible de modifier le compteur qui sert à l'auto-incrément d'une table. Rien ne t'empêche de mettre 20110000 et de passer à 20120000 l'année prochaine.

Mammouth du PHP | 672 Messages

18 oct. 2011, 09:42

Sauf erreur de ma part, il est possible de modifier le compteur qui sert à l'auto-incrément d'une table. Rien ne t'empêche de mettre 20110000 et de passer à 20120000 l'année prochaine.
Possible mais risqué...
Que se passera-t-il s'il y a 10 000 créations d'enregistrements ? #-o

Autres raisons de ne pas faire ça :
- 2011 est certainement l'année, la suite a priori un numéro d'ordre (numéro de facture par exemple).
=> Ton champ contient plusieurs informations.
Violation de la Première Forme Normale.

- comment gères-tu s'il y a une saisie en retard/avance ?
Parce que ça dépend de l'utilisation exacte de la table, mais c'est le genre de chose qui peut arriver régulièrement...

La bonne pratique, c'est de faire trois champs : MaTable ( ID*, Annee, Numero). A la limite tu peux te passer de l'ID et utiliser Annee + Numero comme clé primaire, mais ce n'est pas conseillé...

ViPHP
ViPHP | 2577 Messages

18 oct. 2011, 11:21

Je suis plutôt d'accord avec toi.
J'ai tendance à préférer une table du type (id,identifiant). Pour moi l'identifiant est une notion propre à l'utilisateur et je préfère ne pas prendre partie. Je limite la prise en compte des règles de constitution de l'identifiant à la création. En général, cet identifiant est déterminer pour facilité sa lecture et déterminer quelques informations sans consultation juste en lisant l'identifiant. Avec le même type de raisonnement, j'évite de considérer cet identifiant comme numérique et de m'en servir pour autre chose qu'un accès suite à la saisie d'un utilisateur.

Eléphanteau du PHP | 49 Messages

18 oct. 2011, 12:54

Bonjour,

Merci à tous et notamment à toi macgawel pour les explications sur la « Première Forme Normale », je vais me tourner vers (LA NORMALISATION) des données.
Eventuellement avec la création d’un ID_2011 différents en supplément, voir même par concaténation. etc.
< ?php
$mavar1 = "2011";
$mavar2 = "_";
$mavar3 = "$_POST['id']";
$mavar4 = ".$mavar1..$mavar2..$mavar3. ";
echo $mavar4;
?>
2011 pouvant être modifié selon le cas…
Je vais y réfléchir, merci.