MySQL Ajouter une table à une autre table

Résolu
Julien -  
Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   -
Bonjour tout le monde... après recherches infructuseuses, je viens demander aide...

Je cherche à copier une sélection d'une table MySQL dans une autre table qui n'est pas vide avec du code PHP.

$query = "INSERT INTO table_dest SELECT * FROM table_src WHERE genre LIKE 'exemple'";

Avec cet ligne de code j'arrive à copier la sélection des enregistrement LIKE 'exemple' de la table_src vers la table_dest mais seulement si la table_dest est vide.

Lorsque la table_dest a déjà des enregistrements, cela créé une l'erreur suivante...

Duplicate entry '5' for key 1

Il n'y a aucune relation entre ces deux tables
Elles ont exactement la même structure (12 champs dont le premier est un index avec auto_incrément)

Bien sur dans les 2 tables il y a des enregistrement qui ont la même valeur d'index

Quelqu'un aurait une solution?

2 réponses

  1. phunk Messages postés 507 Date d'inscription   Statut Membre 195
     
    Salut, ta colonne auto_increment doit être en clé primaire, et tu dois chercher à insérer une valeur identique donc il te jette.
    0
  2. Julien
     
    tu as tout a fait raison... tu m'as mis sur la bonne piste.

    $query = "INSERT INTO table_dest SELECT * FROM table_src WHERE genre LIKE 'exemple'";
    donnait une erreur Duplicate entry '5' for key 1

    je sélectionnait tous les champs dans la table source et essayait de les mettre dans tous les champs de la table de destination.

    j'ai donc résolu mon problème...

    $query = "INSERT INTO table_dest('champs2','champs3','champs4','etc..') SELECT champs2,champs3,champs4,etc.. FROM table_src WHERE genre LIKE 'exemple'";

    comme ça le champs1 qui est l'index avec l'auto-incrément et la clé primaire n'entre pas dans l'opération.
    avec cette requête, les enregistrement sélectionné dans la table_src sont mis à la suite des enregistrements de la table_dest avec une nouvelle valeur auto_incréement.

    merci pour ton aide
    0
    1. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
       
      Si tu veux tout simplement ignorer les doublons, tu peux également faire ceci :

      $query = "INSERT IGNORE INTO table_dest('champs2','champs3','champs4','etc..') SELECT champs2,champs3,champs4,etc.. FROM table_src WHERE genre LIKE 'exemple'";
      0