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 :

pb insert select tables multiples


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut pb insert select tables multiples
    Bonjour à toutes et tous

    je suis tout neuf sur ce forum ainsi que sous phpmyadmin mysql

    j'ai un soucis avec l'utilisation de insert et select, j'ai créé des tables avec multiples entrées en l'occurence ( client avec nom et prénom, entree avec 2 entrées, plat de résistance avec 2 plats dessert avec 2 desserts et une table réservation que j'aimerai incrémenter à la demande avec possibilités de choisis un item de chaque table

    la commande suivante fonctionne et incrémente bien mon nom et prénom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT reservations (nom, prenom)
    SELECT nom, prenom FROM clients WHERE idclients LIKE '1'
    mais je n'arrive pas à entrer tous les items sur une même ligne

    par ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT entree (entree)
    SELECT entree FROM clients WHERE identree LIKE '1'
    me rentre bien mes entrées mais sur une nouvelle ligne

    quelle commande me permettrait d'incrémenter dans un même temps tous les items de reservation ( nom, prénom, date, entrée, plat, dessert ) SVP

    Je sais pas si je suis clair dans mes explication mais je suis neuf d'une semaine en php mysql

    j'ai googelisé depuis ce matin mais là j'ai la tête qui va plus suivre

    merci d'avance pour vos précieuses pistes


    Christophe

  2. #2
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Merci pour la modif Chtulus

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par christophe.ribet Voir le message
    je suis tout neuf sur ce forum ainsi que sous phpmyadmin mysql
    J'ai un peu l'impression que tu es tout neuf aussi dans le monde des bases de données !
    Répéter un nom et prénom d'un client dans une table de réservation, c'est de la redondance d'information, c'est donc utiliser un SGBDR comme un simple tableur !

    la commande suivante fonctionne et incrémente bien mon nom et prénom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT reservations (nom, prenom)
    SELECT nom, prenom FROM clients WHERE idclients LIKE '1'
    mais je n'arrive pas à entrer tous les items sur une même ligne

    Ce qu'il faudrait plutôt, c'est avoir dans la table des réservations l'identifiant du client et c'est lui qu'il faut insérer avec une requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO reservations(idclient)
    SELECT idclient
    FROM clients
    WHERE nom = 'Dupont' AND prenom = 'Jean'
    En espérant que tu n'auras pas deux clients portant ce nom sinon il va insérer deux réservations !

    J'ajoute que :
    - LIKE '1' est équivalent à = '1'
    - un identifiant tel que idclient est normalement de type entier non null non signé et autoincrémenté, ce qui fait qu'il ne faut pas mettre ces valeurs d'identifiant entre ' : idclient = 1 est la bonne syntaxe.

    par ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT entree (entree)
    SELECT entree FROM clients WHERE identree LIKE '1'
    me rentre bien mes entrées mais sur une nouvelle ligne
    Ca c'est tout à fait normal ! Une réservation = une ligne dans la table des réservations, un client = une ligne dans la table des clients, etc.

    Bref, un peu de lecture me semble indispensable avant d'aller plus loin :
    http://sqlpro.developpez.com/cours/modelisation/merise/
    http://cyril-gruau.developpez.com/merise/
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  4. #4
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    comme tu dis je suis tout neuf en base de données

    je teste et lis et je donne des nouvelles

  5. #5
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    vi, je vois à peu prêt comment ça fonctionne

    mais ce que je veux, c'est entrer le nom et prénom du client en même temps que l'entrée, plat et dessert désirés pour qu'ils apparaissent sur la même ligne dans réservation

    possible ou pas ???

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Ben utilise un tableur alors, ce sera plus simple !

    As-tu vraiment besoin de faire une base de données pour ça ?

    Si tu vois à peu près comment ça fonctionne et si tu as vraiment besoin d'une base de données, modélise ta base et montre nous ton beau MCD.

    Après on pourra t'aider pour les requêtes qui te permettront de l'alimenter.

    PS et HS : J'ai été à l'école avec un Bruno Ribet au Havre. Possible qu'il soit de ta famille ? Si oui passe lui le bonjour.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  7. #7
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    si, je suis obligé de faire une base ( pour une formation )

    j'ai réussi à insérer à partir de plusieurs tables avec le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT reservations (nom, prenom, entree)
    SELECT nom, prenom, entree
    FROM clients, entree
    mais ça me met que tous les clients on faits la réservation de toutes les entrées

    apparemment je ne peux utiliser le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM clients WHERE idclients LIKE '1'
    c'est dommage je sentais que j'y étais presque

    si ça peut aider: l'ensemble de ma base

    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
    -- phpMyAdmin SQL Dump
    -- version 3.1.2
    -- http://www.phpmyadmin.net
    --
    -- Serveur: localhost
    -- Généré le : Mer 01 Avril 2009 à 15:24
    -- Version du serveur: 5.0.67
    -- Version de PHP: 5.2.6
     
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
     
    --
    -- Base de données: `restaurant`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `clients`
    --
     
    CREATE TABLE IF NOT EXISTS `clients` (
      `idclients` int(11) NOT NULL auto_increment,
      `nom` varchar(50) collate utf8_unicode_ci NOT NULL,
      `prenom` varchar(50) collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`idclients`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
     
    --
    -- Contenu de la table `clients`
    --
     
    INSERT INTO `clients` (`idclients`, `nom`, `prenom`) VALUES
    (1, 'Leguoin', 'Paul'),
    (2, 'Papou', 'Raymond');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `dessert`
    --
     
    CREATE TABLE IF NOT EXISTS `dessert` (
      `iddessert` int(11) NOT NULL auto_increment,
      `dessert` varchar(50) collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`iddessert`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
     
    --
    -- Contenu de la table `dessert`
    --
     
    INSERT INTO `dessert` (`iddessert`, `dessert`) VALUES
    (1, 'île flottante'),
    (2, 'fruits');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `entree`
    --
     
    CREATE TABLE IF NOT EXISTS `entree` (
      `identree` int(11) NOT NULL auto_increment,
      `entree` varchar(50) collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`identree`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
     
    --
    -- Contenu de la table `entree`
    --
     
    INSERT INTO `entree` (`identree`, `entree`) VALUES
    (1, 'carottes rapées oeufs mimosa'),
    (2, 'poireaux en vinaigrette');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `platresistance`
    --
     
    CREATE TABLE IF NOT EXISTS `platresistance` (
      `idplatresistance` int(11) NOT NULL auto_increment,
      `platresistance` varchar(50) collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`idplatresistance`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
     
    --
    -- Contenu de la table `platresistance`
    --
     
    INSERT INTO `platresistance` (`idplatresistance`, `platresistance`) VALUES
    (1, 'boeuf bourguignon'),
    (2, 'endives au jambon');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `reservations`
    --
     
    CREATE TABLE IF NOT EXISTS `reservations` (
      `idreservations` int(11) NOT NULL auto_increment,
      `date` date NOT NULL,
      `nom` varchar(50) collate utf8_unicode_ci NOT NULL,
      `prenom` varchar(50) collate utf8_unicode_ci NOT NULL,
      `entree` varchar(50) collate utf8_unicode_ci NOT NULL,
      `platresistance` varchar(50) collate utf8_unicode_ci NOT NULL,
      `dessert` varchar(50) collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`idreservations`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=28 ;
     
    --
    -- Contenu de la table `reservations`
    --
     
    INSERT INTO `reservations` (`idreservations`, `date`, `nom`, `prenom`, `entree`, `platresistance`, `dessert`) VALUES
    (27, '0000-00-00', 'Papou', 'Raymond', 'poireaux en vinaigrette', '', ''),
    (26, '0000-00-00', 'Leguoin', 'Paul', 'poireaux en vinaigrette', '', ''),
    (25, '0000-00-00', 'Papou', 'Raymond', 'carottes rapées oeufs mimosa', '', ''),
    (24, '0000-00-00', 'Leguoin', 'Paul', 'carottes rapées oeufs mimosa', '', '');

    PS: Je ne connais pas ce Monsieur Ribet, si ça se trouve on est bien de la même famille

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

Discussions similaires

  1. INSERT / SELECT sur tables multiples
    Par AlexisB dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/11/2008, 15h17
  2. Insert select dans table temporaire
    Par cyrgan dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 19/06/2008, 20h32
  3. Réponses: 9
    Dernier message: 07/02/2008, 13h44
  4. insert into table values/ insert into table select
    Par aaronw dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/05/2005, 15h14
  5. [debutant] select-insert sur tables de bases differentes
    Par RedMax dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/10/2004, 18h59

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