Clé primaire deux premières lettres nom, prénom + numéro

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Clé primaire deux premières lettres nom, prénom + numéro

Re: Clé primaire deux premières lettres nom, prénom + numéro

par moogli » 19 mars 2013, 21:48

tester la présence c'est relativement simple, après il y a plusieurs techniques :

- bourrin : on tente l'insertion et traite l'erreur duplicate key si elle survient :mrgreen:
- Soft un select count(*) from la tabel where lapk='la valeur que tu calcule' (tu peux utiliser un like :)

- faire propre : une procédure stockée qui va gérer la chose, tu lui passe les infos en paramètre et dedans tu calcule ta clef primaire.


quoi que tu fasse, pour respecter le cahier des charges tu va être obligé de choisir comment tu régle l'incrément après les initiales.

la solution la plus simple, pour moi, est celle que je te propose.
create table incrementinitiale (
    initiale varchar(4) not null, 
    numero int not null default 0,
    primary key initiale
);
le fait de mettre les initiale en pk force l'unicité de cette colonne.

Ensuite l’algorithme est simple

- "calcule de la clef" (deux substr pour récupérer les 4 lettres).
- un select sur la table incrementinitiale pur savoir si la chaîne existe déjà.
- si oui on récupère le numéro, on l'incrémente et on peux insérer dans la table final
- on pense à mettre à jour la table incrementinitiale .
- Si non
- on insère la chaine dans incrementinitiale et on ajoute 0 à la chaine.
- insertion dans la table finale.

ET, comme déjà dit, le must : une procédure Stockée et c'est réglé :)

sinon, sans autre table, tu fait un select avec un like sur la PK avec un order by laPK desc (si c'est mysql ajoute un limit 1 pour juste la dernière ligne).
- avec la dernière valeur un substr pour récupérer le numéro, incrémente le numéro et recréer la chaine
- insertion dans la table

@+

Re: Clé primaire deux premières lettres nom, prénom + numéro

par Brice83 » 19 mars 2013, 21:15

Bonsoir,

c'est une insertion depuis un formulaire html présent sur une page php ou bien il faut récupérer les données déja présente en bdd pour les vérifier-réinsérer ?

J'entend par formulaire un champ prénom et un champ nom que les visiteurs doivent renseigner pour l'insertion en bdd ...

Re: Clé primaire deux premières lettres nom, prénom + numéro

par Berkowitz1 » 19 mars 2013, 14:28

C'est pour un exercice en cours ...
Je pense que le prof veut qu'on apprenne à se connecter sur une bdd mysql et pouvoir tester si la clé qu'on veut insérer est déjà existante... Est ce possible en langage SQL de tester si telle clé est déjà présente?

Comme vous le dites, en pratique, un autoincrement est beaucoup plus simple à utiliser, et c'est toujours ce que j'ai utilisé jusqu'à présent.

C'est pour cette raison que j'hésite à créer une nouvelle colonne dans mon tableau php en y insérant la clé pour chaque personne. Ca me semble trop simple par rapport à l'exercice demandé.

Je ne sais pas si je me suis bien fait comprendre, j'espère que oui :).


Greg

Re: Clé primaire deux premières lettres nom, prénom + numéro

par moogli » 18 mars 2013, 23:09

il faut aussi penser à une table pour la gestion de l’incrément

par exemple
create table (
initiale varchar(4) not null,
numero int not null default 0,
primary key initiale
)type = myisam;

A l'insertion tu pioche dans cette table et pense à l’incrément du numéro.

Sinon oui une clef numérique serait plus simple à utiliser, quitte à garder ce système pour le "matricule" de la personne si c'est bien le cas.


@+

Re: Clé primaire deux premières lettres nom, prénom + numéro

par AB » 18 mars 2013, 18:24

Je rejoins BGMaxime mais je ne vois pas bien pourquoi ta clé primaire devrait être composée tel que tu le décris car en fait je ne vois pas d'avantage, pourquoi pas simplement utiliser un champ auto incrémenté ?

Re: Clé primaire deux premières lettres nom, prénom + numéro

par BGMaxime » 18 mars 2013, 17:01

Salut,

à mon avis tu as besoin d'une nouvelle "colonne" dans ta table.
C'est ce champ cle_primaire qui sera ta clé primaire :-)

sinon tu n'as aucun moyen de faire co-exister des homonymes.

nom, prenom, cle primaire
dupont, jean, jedupont1
dupont, jean, jedupont2
dupont, jeanne, jedupont3

etc...

donc effectivement, (je te cite) "A chaque entrée dans la table, je devrai vérifier que l'entrée n'existe pas déjà, et dans le cas ou elle existe, passer à la numérotation suivante. " en ajoutant une valeur nouvelle à ta clé primaire, qui sera un incrément de la dernière valeur trouvée pour l'homonyme.

A+

Clé primaire deux premières lettres nom, prénom + numéro

par Berkowitz1 » 18 mars 2013, 14:38

Bonjour à tous,


Débutant en php, pour un exercice je dois faire ceci :

Je possède un tableau de noms et prénoms dans mon code php, je dois tout insérer dans une table mysql, jusque la aucun problème. Ma clé primaire doit être composée des deux premières lettres du nom, du prénom suivi d'un numéro. J'imagine que je dois le faire en ne rajoutant pas une colonne dans mon tableau php composée des deux premières lettres du nom et du prénom...

A chaque entrée dans la table, je devrai vérifier que l'entrée n'existe pas déjà, et dans le cas ou elle existe, passer à la numérotation suivante.

Quelqu'un peut il me donner un petit coup de pouce ?

D'avance merci.


Greg