Partage
  • Partager sur Facebook
  • Partager sur Twitter

insert si n'existe pas

    24 mars 2019 à 22:32:27

    Bonjour, 

    j'ai du créé deux tables pour deux comptes, (je n'ai pas trouvé d'autres solutions)

    Je souhaiterais que lors de l'enregistrement qu'il ne soit pas possible d'enregistrer 2 valeurs dans les deux tables 

    ces colonnes sont déjà en "unique"

    j'ai pensé à cette requête , 

    'INSERT INTO table1 (identifiant, mail, phone, password, clef) VALUE (:identifiant, :mail, :phone, :password, :cle) WHERE NOT EXISTS (SELECT * FROM table1 P INNER JOIN table2 U ON P.mail = U.mail WHERE mail = :mail OR identifiant = :identifiant )'

    J'ai l'erreur 

    ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'WHERE NOT EXISTS (SELECT * FROM table1 P INNER JOIN table2 U ON P.mail = U.ma' à la ligne 1' in D:\wamp64\www\wicote\log\traitement.php on line 35
    ( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'WHERE NOT EXISTS (SELECT * FROM table1 P INNER JOIN table2 U ON P.mail = U.ma' à la ligne 1 in D:\wamp64\www\wicote\log\traitement.php on line 35
    la ligne 35 étant 

    $req -> execute();

    Dans l'attente de vous lire

    -
    Edité par born1 24 mars 2019 à 22:36:16

    • Partager sur Facebook
    • Partager sur Twitter
      25 mars 2019 à 9:25:32

      Bonjour,

      Une requête INSERT INTO ne peut pas contenir de clause WHERE, c'est la norme SQL qui le dit ... d'où l'erreur retournée au niveau du WHERE.

      born1 a écrit:

      j'ai du créé deux tables pour deux comptes, (je n'ai pas trouvé d'autres solutions)

      Peux-tu clarifier ce point ? Pourquoi deux tables ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        25 mars 2019 à 12:35:38

        Biensûr,

        Deux tables pour deux type de compte. 

        Chaque table à une clé étrangère sur une autre, et comme il est impossible d'avoir deux clé étrangère pour une même colonne, il eu fallu que je crée deux tables pour les deux types de compte. 

        table1.id--FK-->table_action1

        table2.id--FK-->table_action2

        En revanche, la même adresse mail ne doit se retrouver dans la table1 et dans la table2,  unique dans toute la base de données!

        Tu m'vais déjà évoquer les "TRIGGER" mais je n'ai rien trouvé la dessus!

        -
        Edité par born1 25 mars 2019 à 12:38:17

        • Partager sur Facebook
        • Partager sur Twitter
          25 mars 2019 à 13:59:08

          Bonjour,

          Pour ce que tu cherches à faire je t'avais donné 2 solutions plus rigoureuses : https://openclassrooms.com/forum/sujet/conseil-construction-table?page=1#message-93050842

          Mais tu n'avais pas répondu et tu as persisté sur une solution moins normalisée et donc plus problématique ...

          Je renouvelle donc mes 2 propositions : avec une colonne rôle ou avec une notion d'héritage ...

          Si tu veux persister, alors tu auras en effet besoin des TRIGGER ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            28 mars 2019 à 21:36:37

            ALORS GRACE A BENZOUYE, LA SOLUTION EST PLUTÔT DES TRIGGERS POUR MON CAS ? POUR CEUX QUI SOUHAITERAIS COMPRENDRE PLUS RENDEZ VOUS ICI

            https://openclassrooms.com/forum/sujet/conseil-construction-table?page=1#message-93050842


            PS: C'EST MOINS COMPLIQUE QUE CA NE LAISSE PENSER OU PARAÎTRE 

            • Partager sur Facebook
            • Partager sur Twitter

            insert si n'existe pas

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown