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

Requêtes MySQL Discussion :

Insertion conditionnelle dans mySQL


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 92
    Par défaut Insertion conditionnelle dans mySQL
    Bonjour, dans le cadre d'un travail pour un de mes cours je dois effectuer une insertion dans une base de données mySQL, cette insertion est conditionnelle, c'est a dire que je ne peux insérer dans la table en question que si certaine conditions sont réunies, dans ce cas les données doivent déjà être présente dans une autre table. Dans le cas qui me concerne je dois insèrer des exemplaires de jeux vidéo, qui sont caractérisé par un id_jeu et id_exemplaire, je dois donc vérifier que l'id_jeu existe déjà dans la table jeuVideo. Ce que je n'arrive pas a faire.

    Voilà ce que j'ai essayé de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Exemplaire (id_jeu, id_exemplaire, id_plateforme) VALUES ({$_POST['id_jeu']}, $id_exemplaire, {$_POST['id_plateforme']}) 
    WHERE (EXISTS (SELECT id_jeu FROM PlateformeJeu WHERE id_plateforme = {$_POST['id_plateforme']})) AND (EXISTS (SELECT id_jeu FROM JeuVideo));
    J'ai également tenté avec IN a la place de EXISTS, mais cela n'as pas fonctionné non plus.

    J'essaie d'utiliser cette requête avec pdo.

    Merci a vous

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 143
    Par défaut
    Faute de connaître la structure de tes tables, j'ai essayé d'extrapoler les informations contenues dans ton essai de requête.
    Cela donnerait quelque chose comme cela :
    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
    INSERT INTO Exemplaire 
        (   id_jeu
        ,   id_exemplaire
        ,   id_plateforme
        ) 
    SELECT  ptf.id_jeu
        ,   $id_exemplaire  
        ,   ptf.id_plateforme
    FROM    PlateformeJeu   ptf
        INNER JOIN
            JeuVideo        jvd
            ON  jvd.id_jeu  = ptf.id_jeu
    WHERE   ptf.id_plateforme   = {$_POST['id_plateforme']}
        AND jvd.id_jeu          = {$_POST['id_jeu']}
    ;
    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
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 92
    Par défaut
    Merci, j'essayerai ça dés que j'ai un peux de temps, et je viens vous dire si j'ai réussi.

  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
    7 484
    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 : 7 484
    Par défaut
    Salut SimonKenoby.

    La clause "where" n'existe pas sur un "insert".

    Citation Envoyé par SimonKenoby
    je dois effectuer une insertion dans une base de données mySQL, cette insertion est conditionnelle, c'est a dire que je ne peux insérer dans la table en question que si certaine conditions sont réunies, dans ce cas les données doivent déjà être présente dans une autre table.
    La solution est de définir des clefs étrangères !

    Vous insérez la colonne "id_jeu" dans la table "Exemplaire" que si elle est déjà présente dans la table "JeuVideo".
    Vous insérez la colonne "id_plateforme" dans la table "Exemplaire" que si elle est déjà présente dans la table "PlateformeJeu".

    Donc définissez une clef étrangère sur la colonne "id_jeu" dans la table "Exemplaire" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT `FK_JEU` FOREIGN KEY (`id_jeu`) REFERENCES `JeuVideo` (`id_jeu`) ON DELETE RESTRICT ON UPDATE CASCADE
    Et une clef étrangère sur la colonne "id_plateforme" dans la table "Exemplaire" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT `FK_PLATEFORME` FOREIGN KEY (`id_plateforme`) REFERENCES `PlateformeJeu` (`id_plateforme`) ON DELETE RESTRICT ON UPDATE CASCADE
    Le insert fonctionnera que si vous avez déjà la référence.
    Sinon, il va pour produire une erreur #1452 si je ne me trompe pas.

    @+

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 92
    Par défaut
    Merci al1_24, ce qui tu m'as donné semble fonctionner, il faut que je travail encore un peux dessus.

    En ce qui concerne ce que Artemus24 me conseil, c'est vrai que ça fonctionne pour le premier cas et j'avoue ne pas y avoir pensé , mais je pense que ça ne fonctionne pas dans le deuxième en effet, une clé étrangère n'est pas suffisante car il faut qu'il existe une relation entre l'id_jeu et id_plateforme dans la table plateformeJeu. En tout cas merci de votre aide, ça m'as déjà bien aidé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insertion image dans mysql = problème
    Par omlip dans le forum JDBC
    Réponses: 2
    Dernier message: 20/05/2009, 23h59
  2. [MySQL] Insertion constante dans MySQL
    Par novphp dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/01/2009, 21h38
  3. Insertion utilisateur dans mysql avec le shell UNIX
    Par loopback dans le forum Débuter
    Réponses: 3
    Dernier message: 18/11/2006, 18h01
  4. [Upload] Insertion image dans mysql après upload
    Par alexmorel dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 23h46
  5. pb avec insertion sigle € dans MySql
    Par mohican13 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 02/12/2005, 10h12

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