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 :

[aide Mysql] Copie de données d'une table


Sujet :

Requêtes MySQL

  1. #1
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut [aide Mysql] Copie de données d'une table
    Bonjour,

    Je souhaiterais faire une copie de données :
    Les données de la table qui est ratachée à l'id_user = 1 (le user par défaut)
    vers
    de nouvelles données (copiées) mais avec un id_user d'un nouveau membre exemple 30

    Structure de ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `menu_gauche` (
      `id_lien` int(255) NOT NULL auto_increment,
      `id_menu` int(10) NOT NULL default '0',
      `nom_menu` varchar(50) NOT NULL default '',
      `lien` varchar(255) NOT NULL default '',
      `position` varchar(100) NOT NULL default '',
      `nom_lien` varchar(60) NOT NULL default '',
      `id_user` int(10) NOT NULL default '1',
      PRIMARY KEY  (`id_lien`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=185 ;
    j'ai éssayé ça mais j'ai une erreur de syntaxe et je ne sais pas si je peux utiliser la clause where dans ma requète ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO menu_gauche (`id_lien` , `id_menu` , `nom_menu` , `lien` , `position` , `nom_lien` , `id_user`) VALUES ('', (SELECT `nom_menu` , `lien` , `position` , `nom_lien` FROM menu_gauche) , '30') WHERE `id_user` = `1`
    J'ai créé des liens par défaut (id_user = 1) et je veux les copier pour un nouveau membre (id_user différent mais le reste pareil, ici dans l'exemple l'id_user = 30)

    d'avance merci pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO menu_gauche (`id_lien` , `id_menu` , `nom_menu` , `lien` , `position` , `nom_lien` , `id_user`)
    VALUES ('', (SELECT `nom_menu` , `lien` , `position` , `nom_lien`
    FROM menu_gauche) , '30')
    WHERE `id_user` = `1`
    Pour insérer des données provenant d'une autre table, la syntaxe à utiliser n'est pas INSERT INTO ... VALUES ... mais INSERT INTO ... SELECT ...
    La syntaxe du SELECT est la même que pour un SELECT classique.

  3. #3
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut
    Désolé mais le problème persiste :

    requête SQL:

    INSERT INTO menu_gauche( `id_lien` , `id_menu` , `nom_menu` , `lien` , `position` , `nom_lien` , `id_user` )
    VALUES (

    '', (

    SELECT `nom_menu` , `lien` , `position` , `nom_lien`
    FROM menu_gauche
    ), '30'
    )
    WHERE `id_user` = `1`
    MySQL a répondu:

    #1064 - Erreur de syntaxe pr賠de 'WHERE `id_user` = `1`' ࠬa ligne 1
    Si quelqu'un peut m'aider?

    merci

  4. #4
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    T'es sûr que l'on doit mettre un values ?

    Je viens de regarder la doc, et l'exemple donné il n'y a pas de values.
    http://dev.mysql.com/doc/refman/5.0/...rt-select.html

  5. #5
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut
    Ba le problème c'est que j'utilise une clé unique "id_lien" qui ne doit pas être renseigné sinon j'ai une erreur de doublons à chaque fois car je copie dans la même table
    C'est pour ça que faut que je trouve une solution.
    De toute manière l'erreur est apparrament sur la clause where nan?

  6. #6
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Dans ton exemple, il y a 7 champs à remplir, mais dans ton values, il n'y en a que 6.

  7. #7
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Et surtout une requête de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table(...) VALUES (...) WHERE ...
    ne correspond à rien de connu

    Allez voir sur http://dev.mysql.com/doc/refman/5.0/fr/insert.html, http://dev.mysql.com/doc/refman/5.0/fr/insert.html est bien, on trouve beaucoup de choses sur http://dev.mysql.com/doc/refman/5.0/fr/insert.html

  8. #8
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut
    je ne vois pas dans les page du manuel comment faire si on ne veut pas renseigner un champ unique pour qu'il s'auto-incrémente

  9. #9
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    A choix faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO matableamoi(clef, champ1, champ2, ...) SELECT NULL, champ1, champ2... FROM matable
    Ou alors ne carrément pas lister la clef :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO matableamoi(champ1, champ2, ...) SELECT chanp1, champ2... FROM matable

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO matableamoi(clef, champ1, champ2, ...)
    SELECT NULL, champ1, champ2...
    FROM matable
    Lorsqu'une clef existe, elle doit avoir une valeur distincte pour chaque enregistrement.
    Si tu mets NULL (aucune valeur) pour la clef, tu inseres une clef étant à NULL, ce qui n'est pas possible.
    Si la clef est auto-incrémetée, ne la liste pas dans INSERT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO matableamoi(champ1, champ2, ...)
    SELECT chanp1, champ2...
    FROM matable
    La clef n'étant pas présente, c'est sa valeur par défaut qui sera prise en compte, c'est-à-dire une valeur auto incrémentée.
    Je doute que la première requête puisse fonctionner.
    La deuxième devrait fonctionner.

  11. #11
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut
    oui ça marche mais pas si je veux changer aussi la valeur de l'id_user (ici 50 par exmple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `menu_droite`(`id_menu` , `nom_menu` , `lien` , `position` , `nom_lien` , `id_user` ) ((SELECT `id_menu` , `nom_menu` , `lien` , `position` , `nom_lien`   FROM `menu_droite`) , `50`) WHERE `id_user` = 1

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Pourrais-tu, s'il te plait, écrire tes requêtes sur plusieurs lignes, elles seraient plus lisibles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO `menu_droite`(`id_menu` , `nom_menu` , `lien` , `position` , `nom_lien` , `id_user` )
    ((SELECT `id_menu` , `nom_menu` , `lien` , `position` , `nom_lien`
    FROM `menu_droite`) , `50`)
    WHERE `id_user` = 1
    La syntaxe de INSERT SELECT est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO 'table1' ('champ1', 'champ2', ... )
    SELECT 'champA', 'champB', ...
    FROM 'table2'
    WHERE conditions
    Pour ajouter un champ dans la table, il faut le mettre dans SELECT, non pas après FROM.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO `menu_droite`(`id_menu` , `nom_menu` , `lien` , `position` , `nom_lien` , `id_user` )
    SELECT `id_menu` , `nom_menu` , `lien` , `position` , `nom_lien`, `50`
    FROM `menu_droite`
    WHERE `id_user` = 1

  13. #13
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut
    j'ai éssayé de faire comme tu dis mais j'ai toujours une erreur de syntaxe sur la nouvelle entrée id_user = 50.
    "50" n'est pas le nom de ma table mais la nouvelles valeur que je souhaite inséré et le reste des valeurs gardent la même valeur que pour id_user = 1.
    requête SQL:

    INSERT INTO `menu_droite` ( `id_menu` , `nom_menu` , `lien` , `position` , `nom_lien` , `id_user` )
    SELECT `id_menu` , `nom_menu` , `lien` , `position` , `nom_lien` , `50`
    FROM `menu_droite`
    WHERE `id_user` =1
    MySQL a répondu:

    #1054 - Champ '50' inconnu dans field list
    merci pour ton aide

  14. #14
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Le backquote <<`>> délimite les noms de tables et colonnes, contrairement au <<'>>. Donc `50` fait rérérence au champ nommé 50 qui semble ne pas exsiter

    Citation Envoyé par jeremya
    Je doute que la première requête puisse fonctionner.
    La deuxième devrait fonctionner.
    Sur mon MySQL le coup du NULL est passé (mais pas un ''). Effectivement ce n'est peut-être pas ce qu'il y a de plus idiomatique et omettre le champ est aussi bien.

  15. #15
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Les chaines entre quotes obliques indiquent à MySQL un nom de champ, cette utilisation est à proscrire sauf si on a un nom de colonne de même nom qu'un mot réservé de MySQL(à éviter).

    Les numériques peuvent s'écrirent directement sans quotes.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO menu_droite(id_menu, nom_menu, lien, position, nom_lien, id_user)
    SELECT id_menu, nom_menu, lien, position, nom_lien, 50
    FROM menu_droite
    WHERE id_user=1;

  16. #16
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut
    Super vous êtes géniaux !!!!

    ça marche impecable !

    un grand merci à ceux qui m'ont filé un coup de main et surtout à Xunil qui a trouvé la solution

    Je rappelle la solution pour ceux qui chercherons dans le forum un même problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO menu_droite(id_menu, nom_menu, lien, position, nom_lien, id_user)
    SELECT id_menu, nom_menu, lien, position, nom_lien, 50
    FROM menu_droite
    WHERE id_user=1;

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

Discussions similaires

  1. [MySQL] [php/mysql] Afficher les données d'une table (Débutant)
    Par Guns Of The Patriots dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 03/06/2010, 15h51
  2. [MySQL] PHP-MySQL: Insertion de donnée dans une table vide
    Par jrosenzw dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/03/2009, 03h11
  3. Réponses: 3
    Dernier message: 15/10/2008, 10h24
  4. Copie de données d'une table à une autre
    Par Jacques Bellavance dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/04/2008, 17h33
  5. Copie des données d'une table d'une base Interbase 6
    Par Djedjeridoo dans le forum InterBase
    Réponses: 6
    Dernier message: 02/02/2004, 10h39

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