Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3038 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [résolu] clé primaire auto-incrémentée avec masque de deux caractères?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] clé primaire auto-incrémentée avec masque de deux caractères?

n°1850169
moaaaaa
Posté le 12-02-2009 à 09:34:01  profilanswer
 

Bonjour,
 
Ma question va vous paraître bizarre mais comme le dit le titre, j'aurais aimé savoir si il est possible de faire un masque pour une clé primaire avec auto-incrémentation.
Je m'explique, il faudrait que l'on aie 7 caractères au total, les deux premiers sont des lettres et les 5 derniers seraient des chiffres qui seraient incrémentés.
Exemple: "AAxxxxx" où le "AA" serait le masque et les 5 "x" seraient les chiffres.
 
Avant qu'on me tire dessus, je suis complètement conscient que les deux premières lettres engendrent que le type soit "char" mais y'aurait-il une astuce pour contourner cela?
 
Ceci doit avoir ce format pour un étiquetage d'où cette contrainte.
Je travaille avec PHP donc je pourrais faire un auto-incrément pour la clé et lors de l'insertion dans la base, récupérer la valeur de la dernière clé pour l'insérer dans un champs "identifiant" par exemple et ajouter le masque (il me semble que cela pourrait être une solution) donc si vous avez des idées (constructives), je suis preneur.
Si jamais, je travail avec MySQL Workbench ou EasyPHP ou en commandes SQL...
 
Merci


Message édité par moaaaaa le 13-02-2009 à 12:19:02
mood
Publicité
Posté le 12-02-2009 à 09:34:01  profilanswer
 

n°1850176
aspirateur
Posté le 12-02-2009 à 09:53:02  profilanswer
 

Pourquoi ne pas rajouter le filtre lorsque tu as besoin de la référence.
 
Par exemple, dans ta table tu aurai un enregistrement comme celui ci:
 
ID    DESIGNATION
1             Café
 
Et quand tu veux afficher tu rajoutes ton filtre AA?
 
C'est pas envisageable?

n°1850179
macgawel
Posté le 12-02-2009 à 09:59:02  profilanswer
 

aspirateur a écrit :

Pourquoi ne pas rajouter le filtre lorsque tu as besoin de la référence.
 
Par exemple, dans ta table tu aurai un enregistrement comme celui ci:
 
ID    DESIGNATION
1             Café
 
Et quand tu veux afficher tu rajoutes ton filtre AA?
 
C'est pas envisageable?


[:plusun]
Ou alors, tu crées deux champs, un champs Id autoincrémenté, et un champ Etiquetage=VARCHAR2.
 
Pour rappel, une clé primaire est sensément non signifiante...

n°1850213
moaaaaa
Posté le 12-02-2009 à 10:46:29  profilanswer
 

Merci à tous pour vos réponses et pour la rapidité de celles-ci...
 
L'idée du filtre est bonne mais le problème est que nous devrons faire une recherche sur ce champs. Ainsi, si l'utilisateur entre AA00001 pour la recherche, il faudrait supprimer les deux premier caractères et faire la recherche sur les 5 chiffres en contrôlant qu'ils soient numériques si j'ai bien compris ce que tu proposes?
 
Pour la deuxième option qui était de créer deux champs, je devrais faire une recherche en concaténant les deux champs dans la requête? Ou tu me conseillerais de faire une clé double? Sachant que pour l'instant, nous ne traîterons que des objets ayant la valeur "AA" ->
etiquette           id                objet
   AA             00001              un objet
   AA             00002              un autre objet
   AA             00003              un troisième objet
    .                  .                     .
    .                  .                     .
    .                  .                     .
 
avec comme clé primaire etiquette et id?
 
Ces deux solutions sont envisageables et je vous remercie, mais je me demandais si il y avait une moyen plus simple (j'avais déjà réfléchi dans ce sens)...
 
Si il y a d'autres propositions, je reste ouvert et si j'ai pas tout compris, vous pouvez sans autre me renseigner.
 
Merci dans tous les cas.

n°1850230
aspirateur
Posté le 12-02-2009 à 11:12:31  profilanswer
 

Ben je vois pas comment tu peux faire autrement  [:spamafote]

 

Dans le premier cas, la recherche ne pose pas de problème, il suffit que tu enlève les AA. Et que tu fasses ta recherche.

 

Pour moi c'est le plus simple à mettre en place, une petite fonction et c'est tout.

 

Après l'idée de macgawel est bonne aussi, je pense qu'il voulait dire de faire ca:

 


ID             ETIQUETTE              OBJET
1               AA00001                Truc

 

Et tu fais tes recherches sur le champ étiquette.

 

EDIT: Heu j'ai relu, je pense pas que c'est ca qu'il voulait dire  :whistle: mais ca reste une idée aussi


Message édité par aspirateur le 12-02-2009 à 11:14:44
n°1850254
macgawel
Posté le 12-02-2009 à 11:45:26  profilanswer
 

En fait, il faudrait voir un peu la théorie - comment est sensée être construite l'étiquette.
 
Au choix :
1. On a une table

ID Objet
 1 Truc
 2 Bidule


Et on construit l'étiquette en php.

Code :
  1. $etiquette="AA".$id;


 
2. On a directement l'étiquette dans la table

ID Objet  Etiquette
 1 Truc   AA00001
 2 Bidule BB00001


Avantages :
- comme dans l'exemple, on dissocie l'étiquette de l'identifiant.
- on conserve le principe de l'Id non signifiant.
- on simplifie la gestion des étiquette
Inconvénient : on rajoute un champ

n°1850263
aspirateur
Posté le 12-02-2009 à 11:56:02  profilanswer
 

100% d'accord  :jap:  
 
Je préconise la solution 2  [:panzemeyer]

n°1850274
moaaaaa
Posté le 12-02-2009 à 12:05:54  profilanswer
 

Ok, merci à tous,
 
Je vais effectivement faire comme la 2ème proposition de macgawel, ça me semble être le plus judicieux (je n'enlève rien à ta proposition aspirateur  ;) ).
 
Euh... question bête, je ne trouve nulle part comment mettre le problème comme étant "résolu"   :??:  
 
Merci encore pour vos lumières  :jap:  
 
++
 

n°1850735
omega2
Posté le 13-02-2009 à 11:15:50  profilanswer
 

Pour mettre [resolu] il te suffit d'éditer ton premier message et de modifier le titre.
Pour ta question, je passe trop tard, les bonnes solutions t'ont déjà été donné et t'en as choisit une. Par contre, vu la solution que t'as choisit, n'hésite pas à te faire une table de compteur pour ne pas perdre trop de temps dans des 'select max(etiquette) from matable where etiquette like "AA%" '.

n°1850769
moaaaaa
Posté le 13-02-2009 à 12:17:51  profilanswer
 

Merci à vous tous pour le temps que vous avez pris à me répondre...
 
Sinon, voici la méthode finale que j'ai choisi:
 
J'ai mis un ID que j'incrémente avec le code PHP lors d'une nouvelle insertion en regardant la valeur maximale qui est présente dans la BDD. Puis, lors de l'insertion de la nouvelle entrée, je concatène cet ID avec l'étiquette et j'ajoute cela dans un deuxième champ de la table. Ceci permet à l'utilisateur de faire un recherche sur l'étiquette et sur l'ID sans avoir à se préoccuper de l'ID...
 
Pour ceux que ça intéresse, voici le code:
 

Code :
  1. $db->connexionBase();
  2. $objet= $db->selectRow('MAX(id)', 'objet', '');
  3. $db->deconnexionBase();
  4. $_SESSION['id'] = $id[0] + 1;
  5. $etiquette = 'AA' . $_SESSION['id'];
  6. $_SESSION['etiquette'] = $etiquette;


 
Si jamais, les sessions sont là pour passer les objets d'une page à l'autre ou lors de la recharge du formulaire (pas que vous vous étonniez  :pfff: ) et la méthode selectRow() est une méthode créée pour faire un SELECT standard en passant les différents paramètres -> contient la fonction mysql_fetch_row()
 
++


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [résolu] clé primaire auto-incrémentée avec masque de deux caractères?

 

Sujets relatifs
[Resolu] Problème de synchronisation des données ![RESOLU] [PHP/MYSQL] Problème d'exécution de requete imbriqué
[Resolu][Apache] Virtual Host et Alias sous WindowsAffichages de caractères non-ASCII
[Resolu] FileReference et reponse du serveur...[Resolu]Exception Php
[RESOLU] Aligner verticalment un tableauconserver les n premiers caractères d'une variable
Une question sur les suites/chaine de caracteres:)[Résolu] Syntaxe de CSS sous IE et Firefox
Plus de sujets relatifs à : [résolu] clé primaire auto-incrémentée avec masque de deux caractères?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR