MySQL Ajouter une table à une autre table

Résolu/Fermé
Julien - 29 sept. 2006 à 03:17
Jean-François Pillou Messages postés 18707 Date d'inscription lundi 15 février 1999 Statut Webmaster Dernière intervention 16 février 2023 - 20 janv. 2010 à 16:16
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 497 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 30 novembre 2006 193
29 sept. 2006 à 10:30
Salut, ta colonne auto_increment doit être en clé primaire, et tu dois chercher à insérer une valeur identique donc il te jette.
0
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 18707 Date d'inscription lundi 15 février 1999 Statut Webmaster Dernière intervention 16 février 2023 63 266
20 janv. 2010 à 16:16
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