Bonsoir à tous, est il possible dans une table sql de définir un choix à une valeur svp exemple concret:
Champ choix: Valeurs:
A,B,C 1,2,3
Si l utilisateur choisi la réponse B, dans le champ « valeurs » cela enregistre « 2 »
Merci d avance à tous
Bonsoir à tous, est il possible dans une table sql de définir un choix à une valeur svp exemple concret:
Champ choix: Valeurs:
A,B,C 1,2,3
Si l utilisateur choisi la réponse B, dans le champ « valeurs » cela enregistre « 2 »
Merci d avance à tous
Tu peux faire cela avec 2 tables et une dépendance fonctionnelle / clef étrangère :
Table constructeur (id, nom)
Table voiture (id, nom, constructeur_id)
constructeur -------------- id=1 nom=Peugeot id=2 nom=Renault id=3 nom=CitroënLa table voiture vaudra :insert into voiture set nom = 'Alpine', constructeur_id = (select all id from constructeur where nom = 'Renault') ;
id=1 nom=Alpine constructeur_id=2
Visiblement je n’y arrive pas, et vu mes lacunes en sql, peut on être plus précis svp?
De ce que je comprends du besoin, la réponse ici est plutôt l'utilisation d'un CASE :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 create table T1 ( T1C1 smallint primary key , T1C2 char(1) not null , T1C3 smallint not null ) ; insert into T1 (T1C1, T1C2, T1C3) values ( 1 , 'A' , case when T1C2 = 'A' then 1 when T1C2 = 'B' then 2 else 3 end ) , ( 2 , 'C' , case when T1C2 = 'A' then 1 when T1C2 = 'B' then 2 else 3 end ) , ( 3 , 'A' , case when T1C2 = 'A' then 1 when T1C2 = 'B' then 2 else 3 end ) , ( 4 , 'B' , case when T1C2 = 'A' then 1 when T1C2 = 'B' then 2 else 3 end ) ;
Résultat :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from T1 ;
Solution applicable seulement s'il n'y a que peu de valeurs possibles.
Mais en ce cas, il y a une redondance dans la table, quel est le but de la manœuvre ?
Le but est:
Un technicien effectue des installations +/- 8 par jour, nous avons au total 20 techniciens… nous voulons qu’il entre son matériel installé via un formulaire, dans le formulaire nous devons absolument récupérer le nom du matériel placer et non pas une valeur…. En revanche j’ai besoin d attribuer une valeur au matériel pour ensuite créer une barre de progression sur 100 points
Le but étant de dire au technicien en fin de journée tu as eu 90/100
J’espère avoir été compréhensible dans mon texte. Je vous remercie pour votre aide
En ce cas il faut une table matériel (PK soulignée, contraintes unique en gras, FK suffixées #) :
MA_MATERIEL (MA_ident, MA_reference, MA_num_serie, MA_date_fab, MA_valeur...)
Une table Technicien :
TE_TECHNICIEN(TE_ident, TE_matricule, TE_nom, TE_prenom...)
Une table intervention, une intervention est faite par un technicien à une date, c'est donc une table associative dont la PK est composée :
IT_INTERV (IT_date, TE_ident#, MA_ident#, IT_duree, ...)
Et en fin de journée, on recherche les interventions de chaque technicien pour la journée, et on cumule les valeurs des matériels concernés.
Pourquoi ? Généralement le problème ne se pose pas en faisant :dans le formulaire nous devons absolument récupérer le nom du matériel placer et non pas une valeur….
<select name="materiel_id"> <option value="123">Libellé matériel ID 123</option> <option value="234">Libellé matériel ID 234</option> ... </select>
Quand tu fais value = ça note la valeur à la place du matériel placé si j ai bonne mémoire hors il me faut savoir les deux et le matériel placé et la valeur
Voilà, j’ai créé mes 3 tables exactement comme dans votre exemple
J’ai exécuté matériel et technicien
Matériel:
MA_ident: cga
MA_reference: 08:b0:55:30:fe
MA_num_serie: aucune
MA_date_fab: 17-09/2024
MA_valeur: 1.5
Technicien:
TE_ident: Steve
TE_matricule: 7373
TE_nom: Mensior
TE_prenom: steve
En revanche je présume que je dois faire les liens vers la table it_interv
Intervention:
IT_date: date du jour
TE_ident#: faire la relation avec «*Steve*»
MA_ident#: faire la relation avec «*cga*»
IT_duree: aucun
Si les étapes sont justes? Pouvez me dire comment joindre les infos te_ident et ma_ident avec mes deux autres tables svp? Merci
Sais tu me dire comment lié les valeurs svp?
Escartfigue a donné un exemple de modèle de base de données
=> https://www.developpez.net/forums/d2.../#post12044721
Moi un peu plus haut comment on peut l'exploiter à l'insertion
=> https://www.developpez.net/forums/d2.../#post12044452
Exemple de formulaire à générer pour choisir le matériel
=> https://www.developpez.net/forums/d2.../#post12044732
Merci à tous pour votre aide vraiment
Quelques remarque supplémentaires :
Les identifiants du modèle conceptuel qui deviennent clefs primaires dans les tables doivent être concis (pour des raisons de performances) et de contenu stable (car ils se propagent au travers des contraintes d'intégrité dans les tables liées).
Pour la concision, on choisit le plus souvent des identifiants de type integer. L'integer est le type le plus concis à nombre de valeurs égales.
Et pour la stabilité, on choisit en général une valeur attribuée automatiquement par la base de donnée. Selon le SGBD on parle d'identity, de counter, d'auto_increment...
Mais, dans vos exemples, vous utilisez des identifiants de type char et dont le contenu est signifiant.
Si le prénom "Steve" a été mal orthographié et qu'il doit être modifié, alors le phénomène de cascade va engendrer un grand nombre de mises à jour inutiles.
De plus, si deux personnes portent le même prénom, alors on ne pourra pas utiliser une deuxième fois cette valeur, unicité des PK oblige.
Bref, revoyez votre modèle pour remplacer toutes les clefs primaires par des types integer (voire bigint si le nombre de lignes estimé dépasse 2^31) avec la propriété identity ou équivalent selon le SGBD.
Concernant les colonnes de type date, il ne faut pas mélanger les différents séparateurs : "17-09/2024" n'est pas une valeur valide. Utilisez '2024-09-17'.
Bonjour Escartefigue, y a t il un moyen de te parler en privé svp? Merci à toi
Bonjour,
Le principe d'un forum est d'échanger publiquement pour que tout un chacun puisse lire les échanges, participer le cas échéant et bénéficier des solutions proposées quand le sujet sera marqué à "résolu".
Il faut donc poser les questions relatives aux points restant à éclaircir ici, dans ce fil de discussion.
Partager