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

Langage SQL Discussion :

Conception d'une requête imbriquée


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut Conception d'une requête imbriquée
    Bonjour,

    j'aimerai savoir comment je dois m'y prendre pour réaliser mes requêtes SQL.

    J'ai 2 tables : tableA et tableB

    TableA
    id_tableA
    nom
    prenom

    TableB
    id_tableB
    id_tableA
    ville

    Il existe une jointure entre la TableA et la TableB via id_tableA

    J'aimerai savoir comment faire un INSERT INTO dans la TableA (données issues d'un Form_Register) PUIS faire un INSERT INTO dans la TableB (données toujours issues du même Form_Register) + id_tableA

    INSERT INTO tableA ("", nom, prenom) VALUES ("", 'PAUL', 'PIERRE') THEN INSERT INTO tableB ("", "id_tableA", "ville") VALUES ("", (.......), "Paris");

    je ne sais pas comment faire


    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
    21
    22
    23
    24
     
     
    // CREATION DU CONTACT
    private function create(Contact &$contact)
     {
      $stmt = $this->pdo->prepare('INSERT INTO .......... VALUES.....
     
      $stmt->bindValue(':nom', $contact->getNom(), PDO::PARAM_STR);
      ....
     
      //execute la requete préparée et on recupére l'objet pour pouvoir le tester
      $executeIsOK = $stmt->execute();
     
      // on teste le retour de la requete conformément à la documentation ci-dessus : true = si tout s'est bien passé ou false s'il y a une erreure
      if(!$executeIsOK){
       return false;
      } else {
       $id = $this->pdo->lastInsertId(); // on récupère l'identifiant de l'objet créé
       $contact = $this->read($id); // affectation de l'id à l'objet créé
       //var_dump("create $id = " .$id);
     
       return $id;
      }
     }
    J'espère avoir été clair.
    - peut-on faire une seule requête pour insertion dans 2 tables en récupérant et affectant l'id du contact dans la table 2

    ou faut-il faire 2 requête ?

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 302
    Points : 39 647
    Points
    39 647
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Une première remarque : vu que dans TableB il y a l'attribut ville, alors on ne devrait pas avoir dans cette table l'identifiant d'une personne, sauf si votre base ne contient qu'au plus une seule personne par ville
    donc le modèle de données est très probablement mal construit.

    Ensuite, si l'identifiant de la TableA est de type attribué par le SGBD (identity, sequence, auto_increment) alors il existe une fonction qui permet de récupérer la dernière valeur insérée.
    Cette fonction dépend du SGBD, par exemple LAST_INSERT_ID() pour MYSQL, SCOPE_IDENTITY() pour SQL Server, IDENTITY_VAL_LOCAL pour DB2
    il faut utiliser cette fonction pour insérer dans TableB la même valeur que précédemment ajoutée dans TableA

    EDIT : je complète, il faut donc bien deux requêtes, une pour insérer dans TableA de préférence au travers d'une vue qui pointe sur TableA, une autre pour TableB, là encore au moyen d'une vue

Discussions similaires

  1. colonne définie par une requête imbriquée
    Par lper dans le forum Langage SQL
    Réponses: 10
    Dernier message: 02/09/2005, 16h41
  2. une requête imbriquée est-elle autorisée dans un INSERT ???
    Par Ekimasu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/08/2005, 09h21
  3. Passage de paramètres dans une requête imbriquée
    Par DrakkoFR dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2005, 12h46
  4. [Requête] Faire une requête imbriquée?
    Par sekiryou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2004, 22h52
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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