lorsqu'on concatène plusieurs bases MySQL ayant une structure similaire mais dans un ordre différent, ne surtout pas croire que la concaténation est correcte! elle ne fonctionne que si la structure ET l'ordre sont identiques, sinon il prend dans l'ordre seulement
exemple
-- lancer mysql mysql -- creer base testA create database testA; use testA; -- creer table A.a CREATE TABLE `a` ( `a` text NOT NULL, `b` text NOT NULL, `c` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Contenu de la table `a` -- INSERT INTO `a` (`a`, `b`, `c`) VALUES ('Aa', 'Bb', 'Cc'), ('Cc', 'Cb', 'Ca'), ('Bb', 'Bc', 'Ba'); -- creer base testB create database testB; use testB; -- creer table B.a -- noter structure identique mais ordre different -- -- Structure de la table `a` -- CREATE TABLE `a` ( `b` text NOT NULL, `c` text NOT NULL, `a` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Contenu de la table `a` -- INSERT INTO `a` (`b`, `c`, `a`) VALUES ('Bb', 'Bc', 'Ba'); -- Base de données: `testC` -- creer base testC create database testC; use testC; -- creer table C.a -- noter structure identique mais ordre different -- -- Structure de la table `a` -- CREATE TABLE `a` ( `c` text NOT NULL, `b` text NOT NULL, `a` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Contenu de la table `a` -- INSERT INTO `a` (`c`, `b`, `a`) VALUES ('Cc', 'Cb', 'Ca'); -------------------------
INSERT INTO `testA`.`a` SELECT * FROM `testB`.`a` ; INSERT INTO `testA`.`a` SELECT * FROM `testC`.`a` ;
- Resultat de SELECT * FROM `testA`.`a`;
| a | b | c |
|---|---|---|
| Aa | Bb | Cc |
| Cc | Cb | Ca |
| Bb | Bc | Ba |
On voit (notamment) que le champs c de TestC est devenu le champs a de TestA, et que le champs b de TestB est devenue le champs a de TestA
–> prudence, écrire tous les noms des champs
le plus simple pour les récupérer, s'il y en a beaucoup: utiliser phpMyAdmin ou mysql-query-browser et faire un SELECT en choississant tous les champs, puis corriger le script du dessus comme suit
INSERT INTO `testA`.`a` SELECT `a`, `b`, `c` FROM `testB`.`a` ; INSERT INTO `testA`.`a` SELECT `a`, `b`, `c` FROM `testC`.`a`
- Resultat de SELECT * FROM `testA`.`a`;
| a | b | c |
|---|---|---|
| Aa | Bb | Cc |
| Ca | Cb | Cc |
| Ba | Bc | Bc |
korrekt!