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 :

Requete INSERT avec plusieurs SELECT


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Requete INSERT avec plusieurs SELECT
    Bonjour à tous,
    Voila les tables qui sont concernées par la requete que je veux effectuer:

    -- Table Newsletter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE IF NOT EXISTS `newsletter` (
    `id_newsletter` int(4) unsigned NOT NULL AUTO_INCREMENT,
    `objet_newsletter` varchar(40) NOT NULL,
    `adresse_newsletter` varchar(100) NOT NULL,
    `date`timestamp(4) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id_newsletter`)
    ) AUTO_INCREMENT=0 ;
    -- Table Liaison Newsletter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE IF NOT EXISTS `liaison_newsletter` (
    `#id_newsletter` int(4) unsigned NOT NULL, 
    `#id_inscrit` int(4) unsigned NOT NULL, 
      FOREIGN KEY (`#id_newsletter`) REFERENCES newsletter (`id_newsletter`),
      FOREIGN KEY (`#id_inscrit`) REFERENCES inscrit (`id_inscrit`)
    ) ;
    -- Table Inscrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE IF NOT EXISTS `inscrit` (
    `id_inscrit` int(4) unsigned NOT NULL AUTO_INCREMENT,
    `adresse_mail` varchar(60) NOT NULL UNIQUE,
    `mot_de_passe` varchar(40) NOT NULL,
    `statut` varchar(15) NOT NULL,
    `newsletter` varchar(5) NOT NULL,
    `date`timestamp(4) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `#id_abonnement`int(4) unsigned NOT NULL DEFAULT '1',
      PRIMARY KEY (`id_inscrit`),
      FOREIGN KEY (`#id_abonnement`) REFERENCES abonnement (`id_abonnement`)
    ) AUTO_INCREMENT=0 ;
    Ma version de MySQL:5.0.51a

    Mon Problème est:
    Je voudrai remplir la table Liaison Newsletter à l'aide de la table Inscrit et de la table Newsletter de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO liaison_newsletter(#id_newsletter,#id_inscrit) 
    VALUES(SELECT id_newsletter FROM newsletter WHERE adresse_newsletter='$ADRESSE_NEWSLETTER',
    SELECT id_inscrit FROM inscrit WHERE newsletter='oui')
    Le problème est que meme cette requete fonctionné elle m'insèrerait une seulement ligne avec le premier id_inscrit (or il risque d'en avoir plusieurs et pour le id_newsletter c'est pas un problème il y a qu'un avec adresse_newsletter='$ADRESSE_NEWSLETTER'.

    Cela me permettra par la suite de faire avec un SELECT ET JOIN des analyses
    sur mes newsletters.

    J'espère être assez claire.
    Je suis ouvert à toutes propositions.
    Merci d'avance,

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO liaison_newsletter(`#id_newsletter`, `#id_inscrit`) 
    SELECT (
      SELECT id_newsletter
      FROM newsletter 
      WHERE adresse_newsletter = '$ADRESSE_NEWSLETTER'
      ), id_inscrit
    FROM inscrit 
    WHERE newsletter = 'oui'
    Au passage, tu remarqueras que j'ai entouré les colonnes à alimenter d'une apostrophe inversée car leur nom commence par un # qui est le caractère signifiant que ce qui suit est un commentaire. Je pense que tu aurais eu une erreur de syntaxe à ce niveau là en lançant ta requête.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Suite
    Merci pour cette réponse hyper rapide .
    ça marche mais quand il n'y a qu'un seul id_inscrit qui a newsletter='oui'.

    Voila l'erreur que l'on m'affiche:
    Erreur SQL:
    Subquery returns more than 1 row

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Cette erreur semble signifier qu'il y a plusieurs newsletters qui ont la même adresse.

    A vérifier avec la vraie requête envoyée au serveur en exécutant séparément la sous-requête, variable valorisée.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Sujet Clos
    Merci cela marche parfaitement, c'etait moi.
    Encore merci.

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

Discussions similaires

  1. Requete INSERT avec multi-select
    Par dogua dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/07/2010, 15h39
  2. Requete insert avec select
    Par burndev dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/12/2008, 16h55
  3. Requete insertion avec des select
    Par miketidy dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/05/2008, 10h36
  4. Requete insert avec select
    Par nanette38 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 26/03/2008, 16h21
  5. effectuer une requete insert avec 'values' ET 'select'
    Par delaio dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/08/2004, 19h05

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