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 :

VALUES (...nombreux SELECTS...)


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 12
    Points
    12
    Par défaut VALUES (...nombreux SELECTS...)
    Bonjour à tous.

    J'explique mon problème simplement, ensuite je rentre dans les détails...

    Je souhaiterais effectuer un INSERT INTO donc les VALUES sont en fait une succession de SELECT sur d'autres tables.

    Voici mes tables:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    #
    # Structure de la table `activite`
    #
     
    CREATE TABLE `activite` (
      `activite_code` char(2) NOT NULL default '',
      `activite_libelle` varchar(20) NOT NULL default '',
      `activite_coef` decimal(3,2) NOT NULL default '0.00',
      PRIMARY KEY  (`activite_code`),
      UNIQUE KEY `activite_libelle` (`activite_libelle`)
    ) TYPE=MyISAM;
     
    #
    # Contenu de la table `activite`
    #
     
    INSERT INTO `activite` (`activite_code`, `activite_libelle`, `activite_coef`) VALUES ('A', 'Agro-alimentaire', '0.80');
    INSERT INTO `activite` (`activite_code`, `activite_libelle`, `activite_coef`) VALUES ('B', 'Bancaire', '1.15');
    INSERT INTO `activite` (`activite_code`, `activite_libelle`, `activite_coef`) VALUES ('E', 'Education', '0.90');
    INSERT INTO `activite` (`activite_code`, `activite_libelle`, `activite_coef`) VALUES ('G', 'Grande distribution', '0.80');
    INSERT INTO `activite` (`activite_code`, `activite_libelle`, `activite_coef`) VALUES ('H', 'Hotellerie', '0.90');
    INSERT INTO `activite` (`activite_code`, `activite_libelle`, `activite_coef`) VALUES ('I', 'Industrie', '0.75');
    INSERT INTO `activite` (`activite_code`, `activite_libelle`, `activite_coef`) VALUES ('R', 'Restauration', '0.80');
    INSERT INTO `activite` (`activite_code`, `activite_libelle`, `activite_coef`) VALUES ('S', 'Santé', '0.75');
    INSERT INTO `activite` (`activite_code`, `activite_libelle`, `activite_coef`) VALUES ('T', 'Tertiaire', '1.00');
     
    # --------------------------------------------------------
     
    #
    # Structure de la table `devis`
    #
     
    CREATE TABLE `devis` (
      `devis_num` int(11) NOT NULL default '0',
      `devis_surface` smallint(3) NOT NULL default '0',
      `devis_local` char(2) NOT NULL default '0',
      `devis_sol` char(2) NOT NULL default '0',
      `devis_activite` char(2) NOT NULL default '0',
      `devis_encomb` char(2) NOT NULL default '0',
      `devis_periode` char(2) NOT NULL default '0',
      `devis_mail` tinyint(4) NOT NULL default '1',
      `devis_date` date default NULL,
      PRIMARY KEY  (`devis_num`)
    ) TYPE=MyISAM;
     
    #
    # Contenu de la table `devis`
    #
     
     
    # --------------------------------------------------------
     
    #
    # Structure de la table `encombrement`
    #
     
    CREATE TABLE `encombrement` (
      `encombr_code` char(2) NOT NULL default '',
      `encombr_libelle` varchar(20) NOT NULL default '',
      `encombr_coef` decimal(3,2) NOT NULL default '0.00',
      PRIMARY KEY  (`encombr_code`),
      UNIQUE KEY `encombr_libelle` (`encombr_libelle`)
    ) TYPE=MyISAM;
     
    #
    # Contenu de la table `encombrement`
    #
     
    INSERT INTO `encombrement` (`encombr_code`, `encombr_libelle`, `encombr_coef`) VALUES ('V', 'Vide', '1.25');
    INSERT INTO `encombrement` (`encombr_code`, `encombr_libelle`, `encombr_coef`) VALUES ('P', 'Peu encombré', '1.15');
    INSERT INTO `encombrement` (`encombr_code`, `encombr_libelle`, `encombr_coef`) VALUES ('E', 'Encombré', '1.00');
    INSERT INTO `encombrement` (`encombr_code`, `encombr_libelle`, `encombr_coef`) VALUES ('T', 'Très encombré', '0.75');
     
    # --------------------------------------------------------
     
    #
    # Structure de la table `enregistre`
    #
     
    CREATE TABLE `enregistre` (
      `devis_num` int(11) NOT NULL default '0',
      `user_num` mediumint(9) NOT NULL default '0',
      PRIMARY KEY  (`devis_num`,`user_num`)
    ) TYPE=MyISAM;
     
    #
    # Contenu de la table `enregistre`
    #
     
     
    # --------------------------------------------------------
     
    #
    # Structure de la table `local`
    #
     
    CREATE TABLE `local` (
      `local_code` char(2) NOT NULL default '',
      `local_libelle` varchar(20) NOT NULL default '',
      `local_coef` decimal(3,2) NOT NULL default '0.00',
      PRIMARY KEY  (`local_code`),
      UNIQUE KEY `local_libelle` (`local_libelle`)
    ) TYPE=MyISAM;
     
    #
    # Contenu de la table `local`
    #
     
    INSERT INTO `local` (`local_code`, `local_libelle`, `local_coef`) VALUES ('A', 'Allée dégagée', '1.10');
    INSERT INTO `local` (`local_code`, `local_libelle`, `local_coef`) VALUES ('B', 'Bureau', '1.00');
    INSERT INTO `local` (`local_code`, `local_libelle`, `local_coef`) VALUES ('S', 'Sanitaires', '0.85');
    INSERT INTO `local` (`local_code`, `local_libelle`, `local_coef`) VALUES ('H', 'Chambre', '0.90');
    INSERT INTO `local` (`local_code`, `local_libelle`, `local_coef`) VALUES ('K', 'Locaux sociaux', '0.80');
    INSERT INTO `local` (`local_code`, `local_libelle`, `local_coef`) VALUES ('M', 'Médicalisé', '0.80');
    INSERT INTO `local` (`local_code`, `local_libelle`, `local_coef`) VALUES ('G', 'Restauration', '0.70');
    INSERT INTO `local` (`local_code`, `local_libelle`, `local_coef`) VALUES ('C', 'Voie de circulation', '0.90');
    INSERT INTO `local` (`local_code`, `local_libelle`, `local_coef`) VALUES ('E', 'Escalier - Ascenseur', '0.70');
     
    # --------------------------------------------------------
     
    #
    # Structure de la table `periode`
    #
     
    CREATE TABLE `periode` (
      `periode_code` char(2) NOT NULL default '',
      `periode_libelle` varchar(20) NOT NULL default '',
      `periode_coef` decimal(3,2) NOT NULL default '0.00',
      PRIMARY KEY  (`periode_code`),
      UNIQUE KEY `periode_libelle` (`periode_libelle`)
    ) TYPE=MyISAM;
     
    #
    # Contenu de la table `periode`
    #
     
    INSERT INTO `periode` (`periode_code`, `periode_libelle`, `periode_coef`) VALUES ('T', '3x par semaine', '1.50');
    INSERT INTO `periode` (`periode_code`, `periode_libelle`, `periode_coef`) VALUES ('Q', 'Quotidien', '1.10');
    INSERT INTO `periode` (`periode_code`, `periode_libelle`, `periode_coef`) VALUES ('H', 'Hebdomadaire', '1.00');
    INSERT INTO `periode` (`periode_code`, `periode_libelle`, `periode_coef`) VALUES ('M', 'Mensuel', '1.10');
     
    # --------------------------------------------------------
     
    #
    # Structure de la table `sol`
    #
     
    CREATE TABLE `sol` (
      `sol_code` char(2) NOT NULL default '',
      `sol_libelle` varchar(20) NOT NULL default '',
      `sol_coef` decimal(3,2) NOT NULL default '0.00',
      PRIMARY KEY  (`sol_code`),
      UNIQUE KEY `sol_libelle` (`sol_libelle`)
    ) TYPE=MyISAM;
     
    #
    # Contenu de la table `sol`
    #
     
    INSERT INTO `sol` (`sol_code`, `sol_libelle`, `sol_coef`) VALUES ('B', 'Béton - Ciment', '1.05');
    INSERT INTO `sol` (`sol_code`, `sol_libelle`, `sol_coef`) VALUES ('C', 'Carrelage', '1.00');
    INSERT INTO `sol` (`sol_code`, `sol_libelle`, `sol_coef`) VALUES ('F', 'Fer - Métal', '0.80');
    INSERT INTO `sol` (`sol_code`, `sol_libelle`, `sol_coef`) VALUES ('G', 'Granit - Marbre', '0.95');
    INSERT INTO `sol` (`sol_code`, `sol_libelle`, `sol_coef`) VALUES ('M', 'Moquette', '1.15');
    INSERT INTO `sol` (`sol_code`, `sol_libelle`, `sol_coef`) VALUES ('P', 'Plancher', '0.90');
    INSERT INTO `sol` (`sol_code`, `sol_libelle`, `sol_coef`) VALUES ('T', 'Thermoplastique', '0.95');

    Le but de ma requête serais en fait d'entrer sur une ligne tous les xxx_code (des tables local, sol, activite, encombrement et periode) sachant que j'ai en entrée les xxx_libelle de ces tables.

    Voici ce que j'ai fait pour l'instant, qui évidemment ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    "INSERT INTO devis (devis_surface,devis_local,devis_sol,devis_activite,devis_encomb,devis_periode,devis_date)
    	 				 VALUES('$surface',
    					 		SELECT local_code FROM local WHERE local_libelle='$local',
    							SELECT sol_code FROM sol WHERE sol_libelle='$sol',
    							SELECT activite_code FROM activite WHERE activite_libelle='$activite',
    							SELECT encombr_code FROM encombrement WHERE encombr_libelle='$encombrement',
    							SELECT periode_code FROM periode WHERE periode_libelle='$periode',
    							'$datejour')";
    et me retourne l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur de syntaxe près de 'SELECT local_code FROM local WHERE local_libelle='Voie de circul' à la ligne 3

    Si quelqu'un pouvait me dire si ce que je souhaite faire est tout de même possible, quelles sont mes erreurs, et comment s'y prendre.


    Merci d'avance. J'espère que mon problème a été compréhensible.

  2. #2
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut
    La syntaxe d'insertion par selection ne serait pas par hasard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO nom_table_2(nom_colonne_tb2) SELECT nom_colonne_tb1 FROM table_1;
    Cette syntaxe fonctionne sous Oracle, mais comme le SQL utilisé est plutôt "éloigné" de la norme, je me demande si cette syntaxe fonctionnera sous ton SGBD...

  3. #3
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut
    Donc, au finish, la sytaxe devrait être la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO devis (devis_surface) VALUES('$surface');
    INSERT INTO devis (devis_local) SELECT local_code FROM local WHERE local_libelle='$local';
    INSERT INTO devis (devis_sol) SELECT sol_code FROM sol WHERE sol_libelle='$sol';
    INSERT INTO devis (devis_activite) SELECT activite_code FROM activite WHERE activite_libelle='$activite';
    INSERT INTO devis (devis_encomb) SELECT encombr_code FROM encombrement WHERE encombr_libelle='$encombrement';
    INSERT INTO devis (devis_periode) SELECT periode_code FROM periode WHERE periode_libelle='$periode';
    INSERT INTO devis (devis_date) VALUES ('$datejour');

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Oui tout à fait. J'avais pensé à faire ça, puis j'ai abandonné, je me suis dit qu'en faisant ça, ça allait en fait me créer une ligne à chaque fois, ne remplissant qu'une valeur, laissant les autres sans rien.

    (Pour info, je bosse avec MySQL)

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Bon, je viens de faire différemment. C'est à dire que j'ai dans un premier temps fait toutes mes requêtes SQL et je stocke le résultat de chacune dans des variables. Ensuite, eh bien j'utilise ces variables dans mes VALUES.
    Petit problème cependant, par exemple pour devis_local, rien n'est inscrit; et pour devis_sol, devis_activite, devis_encomb et devis_periode, il m'inscrit dans la base "Resource id #5" au lieu de la valeur correspondant au xxx_code.

    Une idée ?

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

Discussions similaires

  1. <a href="<xsl:value-of select='file'>">
    Par gedeon555 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 28/07/2011, 13h54
  2. [Debutant] [XSL] Probleme xsl:value-of select
    Par olivier1978 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 09/09/2007, 19h31
  3. Réponses: 2
    Dernier message: 20/06/2006, 09h15
  4. <img src="<xsl:value-of select="image"
    Par ToxiZz dans le forum XSL/XSLT/XPATH
    Réponses: 22
    Dernier message: 09/01/2006, 17h17
  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