MySQL Ajouter une table à une autre table

Résolu
Julien -  
Jean-François Pillou Messages postés 19261 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?
A voir également:

2 réponses

phunk Messages postés 498 Date d'inscription   Statut Membre Dernière intervention   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
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
Jean-François Pillou Messages postés 19261 Date d'inscription   Statut Webmaster Dernière intervention   63 277
 
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