Bonjour,

Je voudrais vos avis sur la meilleure méthode a adopter pour migrer une base qui a une structure spécifique vers une autre base avec une structure totalement différente.

Exemple:

Base1:
Table user: id, lastname, firstname, phone, adress;

Base2:
Table user: id, lastname, firstname
Table extend_user: id, phone, adress, user_id;

Biensur ceci est un simple exemple.

Comment pourrais-je procéder pour réaliser cela automatiquement?

PS: A part en passant par un script php qui récupère les lignes de la base1 puis avec un foreach faire un insert recuperant lastId de la table user et insérer les autres infoset lastId dans user_id dans base2 , je ne vois pas comment.

Je suis tout ouïe a vos suggestions.

Merci d'avance

7 réponses


AlexJM
Réponse acceptée

Pourquoi ne pas reprendre le même id qu'ils avaient avant ?

mxmaxime
Réponse acceptée

Salut, @AlexJM donne la bonne piste pour moi.
J'ai approfondi pour t'aider, ma manière n'est peut-être pas la meilleure mais elle fonctionne.
Attention, fait bien attention que le champ userid soit bien une clef étrangère avec id de l'user pour éviter les problèmes qui pourraient survenir.

INSERT INTO locations
    (phone,address, user_id)
    SELECT phone,address,id FROM users

Code SQL de la table location (pas très utile mais on sait jamais)

CREATE TABLE `locations` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `user_id` INT(11) UNSIGNED NOT NULL,
    `phone` VARCHAR(50) NOT NULL,
    `address` VARCHAR(50) NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `Index 2` (`user_id`),
    CONSTRAINT `FK_locations_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB

Tu peux copier d'une table dans une autre comme ceci :

INSERT INTO table2 (column_name(s)) SELECT column_name(s) FROM table1;

Un petit tour dans google suffit ;) http://www.w3schools.com/sql/sql_insert_into_select.asp

Mikachu
Auteur

Merci de ta réponse. Hors je connais cette méthode mais ne répond pas forcement à mon attente. Car la difference entre la base1 et 2 c'est que la table users dans base2 est segmenté en 4 tables (l'ancien dev à eu la super bonne idée de mettre 78 champs dans la meme table dans base1 au lieu de découper ca proprement) et donc je suis en train de faire ce découpage en 4 tables.

Mon seul soucis c' est que je ne savais pas comment faire pour faire donc le insert select automatiquement avec les liaisons entre ces 4 tables grace au user_id.

Je ne sais pas si j'ai été assez claire ... ?

Merci d'avance

Mikachu
Auteur

Ah les gars, je suis débile, j'ai absolument pas pensé à utiliser l'id comme vous le dites. Autant pour moi, ca me parait tout bête d'un coup lol.

Merci beacoup. :)

T'inquiète, ça arrive :)
De rien