IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Lier les 3 première colones de 3 tables


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 3
    Par défaut Lier les 3 première colones de 3 tables
    Bonjour,

    je débute en SQL et je travaille sur PHPMyAdmin, mon objectif est d'avoir un SGBD efficace, en ligne et ergonomique pour ma société.
    Je comprends les codes SQL mais pour l'instant je me sers d'avantage de l'interface PhPMyAdmin pour échanger avec ma BDD.

    J'ai 3 tables paramétrées comme je le souhaite, les 3 premières colones de ces 3 tables sont égales (REF PRODUITS/ ETAT/ NOM PRODUIT), et je souhaiterais rendre automatique l'ajout/la modification d'une ligne dans les 3 tables : si je modifie le titre d'un produit dans la table A, ce même produit se met à jour dans la table C avec le titre changé...

    J'ai creusé au niveau des déclencheurs mais je n'ai pas trouvé.
    Est ce possible ?

    Merci d'avance à tous

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Si vous devez faire ce type de manœuvre, c'est que votre base de données a été mal conçue.
    Le nom du produit devrait apparaitre, associé à sa référence, dans une seule table et les autres tables devraient contenir uniquement la référence du produit.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 3
    Par défaut
    Merci pour la réponse al1_24, je comprends votre point. C'est juste que je me sers de la base directement comme fichier de suivi, donc la personne qui saisira des données devra voir aparaitre le nom du produit, c'est plus simple qu'une simple ref. Donc impossible de lier les 3 premières colonnes de 3 tables ?

    MySQL et PhpMyAdmin est la solution Online, la plus flexible & la plus simple à paramétrer que j'ai trouvé pour un système de gestion de base de donnée produits mais peut être que je me trompe ?

    Merci d'avance,

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 877
    Par défaut
    Salut Baptiste53.

    La réponse de al1_24 signifie que la modélisation de votre base de données a été mal conçue.
    Mais que ce que vous demandez n'est pas impossible à faire.

    Vous avez trois tables. Laquelle est la table maîtresse ?
    Sachant que vous allez mettre à jour vos trois tables, il faut savoir laquelle sera impactée en premier par ces modifications.
    Admettons que cela soit la table "tab1".
    Quand la table "tab1" devra être mise à jour, il faudra mettre aussi à jour les tables "tab2" et "tab3" dans le déclencheur.

    Cela sera du genre :
    Code : 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
    -- ==============
    -- Trigger `maj1`
    -- ==============
     
    DROP TRIGGER IF EXISTS `maj1`;
     
    DELIMITER $$
    CREATE TRIGGER `maj1`
    AFTER UPDATE ON `tabone`
    FOR EACH ROW
    BEGIN
      update `tab2`  set REF_PRODUITS = NEW.REF_PRODUIT  where REF_PRODUIT.= OLD_PRODUIT;
      update `tab2`  set ETAT         = NEW.ETAT         where ETAT        = OLD_ETAT;
      update `tab2`  set NOM_PRODUIT  = NEW.NOM_PREDUIT  where REF_PRODUIT.= OLD_PRODUIT;
     
      update `tab3`  set REF_PRODUITS = NEW.REF_PRODUIT  where REF_PRODUIT.= OLD_PRODUIT;
      update `tab3`  set ETAT         = NEW.ETAT         where ETAT        = OLD_ETAT;
      update `tab3`  set NOM_PRODUIT  = NEW.NOM_PREDUIT  where REF_PRODUIT.= OLD_PRODUIT;
    END$$
    DELIMITER ;
    De même, si c'est une insertion, vous faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    -- ==============
    -- Trigger `maj2`
    -- ==============
     
    DROP TRIGGER IF EXISTS `maj2`;
     
    DELIMITER $$
    AFTER INSERT TRIGGER `maj2`
    ART INSERT ON `tabone`
    FOR EACH ROW
    BEGIN
      insert into `tab2`  (`REF_PRODUIT`,`ETAT`,`NOM_PRODUIT`)  values (NEW.REF_PRODUIT,NEW.ETAT,NEW.NOM_PREDUIT);
      insert into `tab3`  (`REF_PRODUIT`,`ETAT`,`NOM_PRODUIT`)  values (NEW.REF_PRODUIT,NEW.ETAT,NEW.NOM_PREDUIT);
    END$$
    DELIMITER ;
    Cela n'a pas été testé, mais l'idée de ce que vous désirez faire est là !

    @+

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Si vous voulez que l'utilisateur voie simplement les produits avec les informations du produit figurant dans d'autres tables, créez des vues.

    Si ensuite l'utilisateur doit mettre à jour les données, créez les procédures adéquates.

    Mais d'une manière générale, phpMyAdmin est plutôt un outil pour l'administrateur de bases de données, pas à destination de l'utilisateur final des données. Une base de données est en principe utilisée par une application et est invisible pour l'utilisateur final qui ne voit que des (plus ou moins) jolis et ergonomiques écrans de l'application et c'est cette dernière qui se débrouille pour mettre à jour les données ou les interroger pour les afficher à l'utilisateur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 877
    Par défaut
    Salut CinePhil.

    Comme à l'habitude, on reste dans le flou total de la question posée, et l'on doit faire des miracles.
    Je rejoins al1_24 sur le fait que la base de données est mal conçue.
    La solution que j'ai donné répond à la question posée, mais n'est pas correcte du point de vue de la modélisation.
    Comme on peut le voir, une mauvaise modélisation est le symptôme de l'impossibilité de résoudre des problèmes simples.

    Ensuite, on ne sait rien de cette mise à jour, ni comment elle va se faire.
    Si c'est retranscrire des fichiers Excel sous forme de tables MySql, à l'identique, c'est une autre erreur de conception.

    Et au final, beaucoup de débutants ne savent pas travailler correctement quand il s'agit de gérer des données.

    @+

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Salut Artemus,
    Ma réponse complétait les autres et je suis bien d'accord qu'il y a là une grosse erreur de modélisation de la BDD. Un SGBD n'est pas un tableur !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/02/2016, 05h29
  2. Réponses: 1
    Dernier message: 31/10/2013, 10h36
  3. supprimer les 5 premières lignes d'une table
    Par jnmab dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/11/2008, 08h17
  4. Lier les tables
    Par Gebudi dans le forum Access
    Réponses: 11
    Dernier message: 31/08/2005, 12h57
  5. lier les tables acces oracle
    Par xtaze dans le forum Access
    Réponses: 5
    Dernier message: 12/06/2005, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo