Inerer certaines donnees d'une BDD dans une autre

Petit nouveau ! | 3 Messages

14 mars 2009, 20:09

Slt
Actuellement j'utilise un script de galerie photo (Coppermine) et je voudrais le remplacer par un autre (Piwigo, anciennement PhpWebGallery). Le souci c'est que dans la galerie actuel j'ai deja mis pas mal de photos avec leurs descriptions. Donc j'aimerais, apres avoir mis toutes les photos dans ma nouvelle galerie, pouvoir recuperer dans la BDD actuelle, les infos concernant la description des photos, sans devoir me les retaper. Et les inserer dans la nouvelle BDD.

Voila les structures des tables concernant les images, pour chaque BDD :

Coppermine

Code : Tout sélectionner

CREATE TABLE cpg14x_pictures ( pid int(11) NOT NULL auto_increment, aid int(11) NOT NULL default '0', filepath varchar(255) collate latin1_german2_ci NOT NULL default '', filename varchar(255) collate latin1_german2_ci NOT NULL default '', filesize int(11) NOT NULL default '0', total_filesize int(11) NOT NULL default '0', pwidth smallint(6) NOT NULL default '0', pheight smallint(6) NOT NULL default '0', hits int(10) NOT NULL default '0', mtime datetime NOT NULL default '0000-00-00 00:00:00', ctime int(11) NOT NULL default '0', owner_id int(11) NOT NULL default '0', owner_name varchar(40) collate latin1_german2_ci NOT NULL default '', pic_rating int(11) NOT NULL default '0', votes int(11) NOT NULL default '0', title varchar(255) collate latin1_german2_ci NOT NULL default '', caption text collate latin1_german2_ci NOT NULL, keywords varchar(255) collate latin1_german2_ci NOT NULL default '', approved enum('YES','NO') collate latin1_german2_ci NOT NULL default 'NO', galleryicon int(11) NOT NULL default '0', user1 varchar(255) collate latin1_german2_ci NOT NULL default '', user2 varchar(255) collate latin1_german2_ci NOT NULL default '', user3 varchar(255) collate latin1_german2_ci NOT NULL default '', user4 varchar(255) collate latin1_german2_ci NOT NULL default '', url_prefix tinyint(4) NOT NULL default '0', pic_raw_ip tinytext collate latin1_german2_ci, pic_hdr_ip tinytext collate latin1_german2_ci, lasthit_ip tinytext collate latin1_german2_ci, position int(11) NOT NULL default '0', PRIMARY KEY (pid), KEY pic_hits (hits), KEY pic_rate (pic_rating), KEY aid_approved (aid,approved), KEY pic_aid (aid), KEY owner_id (owner_id), FULLTEXT KEY search (title,caption,keywords,filename) ) ENGINE=MyISAM AUTO_INCREMENT=1097 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci COMMENT='Used to store data about individual pics' AUTO_INCREMENT=1097 ;
Piwigo :

Code : Tout sélectionner

CREATE TABLE piwigo_images ( id mediumint(8) unsigned NOT NULL auto_increment, `file` varchar(255) character set utf8 collate utf8_bin NOT NULL default '', date_available datetime NOT NULL default '0000-00-00 00:00:00', date_creation date default NULL, tn_ext varchar(4) default '', `name` varchar(255) default NULL, `comment` text, author varchar(255) default NULL, hit int(10) unsigned NOT NULL default '0', filesize mediumint(9) unsigned default NULL, width smallint(9) unsigned default NULL, height smallint(9) unsigned default NULL, representative_ext varchar(4) default NULL, date_metadata_update date default NULL, average_rate float(5,2) unsigned default NULL, has_high enum('true') default NULL, path varchar(255) NOT NULL default '', storage_category_id smallint(5) unsigned default NULL, high_filesize mediumint(9) unsigned default NULL, `level` tinyint(3) unsigned NOT NULL default '0', md5sum char(32) default NULL, PRIMARY KEY (id), KEY images_i2 (date_available), KEY images_i3 (average_rate), KEY images_i4 (hit), KEY images_i5 (date_creation), KEY images_i1 (storage_category_id) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
Merci d'avance pour votre aide.

ViPHP
ViPHP | 2287 Messages

14 mars 2009, 20:39

Une requête INSERT... SELECT peut servir à ce genre de choses :

http://dev.mysql.com/doc/refman/5.0/fr/ ... elect.html
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Petit nouveau ! | 3 Messages

14 mars 2009, 21:42

Merci pour ta reponse. La je suis un ptit peu perdu. J'arrive a faire la gestion dans PhpMyAdmin, mais bosser directement dans les tables, pour moi c'est vraiment nouveau.
Si j'ai bien compris je doit utiliser cette syntaxe :

Code : Tout sélectionner

INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID FROM tblTemp1 WHERE tblTemp1.fldOrder_ID > 100;
tblTemp1, je doit le changer par cpg14x_pictures (de mon script actuel) et tblTemp2 par piwigo_images (de mon futur script).

Mais apres ?? comment l'utiliser :oops: :?

ViPHP
ViPHP | 2287 Messages

14 mars 2009, 22:13

INSERT... SELECT insère un enregistrement dans la première table pour chaque enregistrement trouvé dans la seconde table qui satisfait les conditions exprimées dans le WHERE.

Le problème dans ton cas est que tes deux tables ont des structures différentes.

Il faut donc que tu fasses correspondre, au mieux (car ce ne sera peut-être pas toujours possible) un champ de la table 2 en face d'un champ de la table 1. L'idéal pour cela est d'avoir sous les yeux les structures des deux tables et de réaliser les associations, une par une. Les correspondances sont faites à partir de l'ordre dans lequel les deux séries de champs sont indiqués dans la requête. C'est là toute la difficulté de ce que tu cherches à faire.

Tu es sur la bonne piste mais il va falloir expliciter plus ta requête donc. Regarde bien la syntaxe dans la page de manuel MySQL. Dans leur exemple ils gèrent un seul champ (nommé fldID/fldOrder_ID), mais toi tu en as beaucoup plus !

Je te conseille de prendre ton temps (mais je vais arrêter de donner ce conseil car personne ne semble vouloir le suivre :lol: ) car tu vas probablement recevoir de nombreuses erreurs qu'il te faudra corriger avant d'y arriver (pour des histoires de type de données dans les champs de tes tables, notamment).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Petit nouveau ! | 3 Messages

15 mars 2009, 02:30

Ha ouai quand meme, ca va etre chaud a faire tout ca. Sinon je pensais a un truc. Je sais pas du tout si ca peu faire la meme chose. J'exporte les 2 tables en CSV. Dans celle de l'ancienne galerie je copies les donnees qui se trouve dans la colonnes qui correspond aux descriptions et je les colle dans la colonne qui correspond aux descriptions dans la nouvelle galerie.
Voila mon idee.