Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2011, 23h00   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 2
Points : 0
Points : 0
Par défaut Mise à jour automatique d'une base Mysql

Bonjour,
Je me décide à demander un petit coup de main.
Je vous explique le problème :
J'ai réalisé un site e-commerce (utilisant prestashop). Je dois à présent, et pour finaliser ce site, importer les produits et les mettre à jour de façon automatique (1 fois par jour), avec les données issues d'une base de données Access (utilisées pour gérer les produits dans la boutique physique). Et pour faciliter la chose, cette base n'a pas la même structure que la base Mysql.
Ayant fouillé un peu sur Google, je me suis dit faire un lien ODBC.
Mon soucis, c'est que mon hébergeur (1and1) sur lequel est hébergé la eboutique et la base de données Mysql, ne permet pas de connexion extérieur à cette base de données.
J'ai tourné le problème dans tous les sens, et ai un peu du mal à trouver une solution.
J'aurais tendance à dire qu'il me faut :
-Faire un duplicata de la base mysql distante, en local sur la machine possédant la base de donnée Access.
-Installer un lien ODBC entre ces 2 bases.
-Faire une requête de récupération des champs adéquats sous Access et exporter les résultats sous forme de tables.
-Exporter ces table vers le lien odbc.
-Exporter la base de données Mysql (locale) sous forme d'un fichier .sql
-Envoyer ce fichier sur le ftp de la boutique
-Faire un script (sans doute php) qui mette à jour les tables Mysql en ligne.

Je m'excuse d'avance si certaines choses sont floues. Je n'ai pas beaucoup de connaissances en Access et odbc.

Est-ce que mon schéma semble correct ? Si oui comment le faire ? (car je n'ai jamais fait) Quel genre de script ferait la mise à jour ?
Et si ce n'est pas correct, quelle serait la solution ?

Merci d'avance pour votre aide.
Bonne soirée
varely83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 23h03   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 986
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 986
Points : 18 234
Points : 18 234
Envoyer un message via MSN à CinePhil
Il y a peut-être un peu plus simple :
- Exporter les données d'Access sous forme de fichier texte délimité .csv
- Envoyer le fichier sur le serveur.
- Utiliser une procédure SQL ou PHP que tu auras programmée qui importera les données dans la BDD MySQL dans les bonnes tables.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/01/2011, 00h45   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Dom-Tom

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 10
Points : 10
Je suis aussi intéressé, surtout par la solution de Cinephil

mais aurais tu un exemple de procedure sql qui importerai le fichier CSV ?

et moi j ai aussi une autre contrainte il faut qu au moin une fois par jour on puisse recuperer les nouvelles commande et clients depuis le site

comment faire ?

merci
phcm971 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 08h55   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 986
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 986
Points : 18 234
Points : 18 234
Envoyer un message via MSN à CinePhil
Pour importer un fichier csv ou tout autre format de fichier texte délimité, il faut utiliser l'instruction LOAD DATA INFILE. Ça importe les données dans une table, à considérer comme une table temporaire juste pour l'importation, sauf si les données importées sont à charger tel quel dans une table structurée de la BDD. Il suffit ensuite de faire les bonnes requêtes sur la table pour répartir les données comme il faut dans les bonnes tables de la BDD. Et ça peut se programmer par exemple en PHP, ou en procédure SQL directement dans MySQL.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 14h17   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 2
Points : 0
Points : 0
Merci Cinephil , je vais essayer ta solution qui a l'air moins complexe que la mienne...
varely83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 14h50   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Dom-Tom

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 10
Points : 10
Cinephil,

j essai mais meme en suivant le lien pour load data file, je n y arrive pas
Citation:
LOAD DATA INFILE 'test.csv' INTO TABLE TEST FIELDS TERMINATED BY ';'
1 - la table test doit elle exister ou bien ca la cree automatiquement en fonction des champs

2 - le fichier test.csv se trouve sur un autre disque (E:\TEMP\test.csv) que dois je mettre

3 - comment importer les images de chaque produit dans la table, car la on peux les mettre dans un fichier csv

merci
phcm971 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 16h47   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 986
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 986
Points : 18 234
Points : 18 234
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par phcm971 Voir le message
1 - la table test doit elle exister ou bien ca la cree automatiquement en fonction des champs
Oui la table doit déjà exister.
Je viens de le faire pour importer un fichier INSEE contenant toutes les communes de France.

Citation:
2 - le fichier test.csv se trouve sur un autre disque (E:\TEMP\test.csv) que dois je mettre
Il faut indiquer alors le chemin complet et il faut que l'utilisateur ait le droit d'accès sur le fichier.
Attention aux chemins Windows avec les anti-slashes, je crois qu'il faut les doubler ou même les quadrupler, je crois qu'il y a un mot la dessus dans la doc mais n'étant pas concerné vu que j'ai abandonné le monde de Bill depuis longtemps...

Citation:
3 - comment importer les images de chaque produit dans la table, car la on peux les mettre dans un fichier csv
Ca c'est une mauvaise idée !
Il faut stocker en BDD le nom du fichier, éventuellement avec son chemin d'accès et laisser les fichiers image en dehors de la BDD.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 18h00   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Dom-Tom

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 10
Points : 10
Merci pour tes réponses

juste pour le point 3, je ne voulais pas les stocker dans la bbd, mais bien passer les fichiers, mais justement, comment les envoyer en meme temps que le csv, car le but est que ce soit tous les jours a une heure donnée, et en automatique envoyer le csv et les images mais avec quoi faire ca, car evidement ca se trouve sur le web

merci
phcm971 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 20h10   #9
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Dom-Tom

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 10
Points : 10
Comment automatiser ca tous les jours à heure fixe
phcm971 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 20h13   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 986
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 986
Points : 18 234
Points : 18 234
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par phcm971 Voir le message
Merci pour tes réponses

juste pour le point 3, je ne voulais pas les stocker dans la bbd, mais bien passer les fichiers, mais justement, comment les envoyer en meme temps que le csv, car le but est que ce soit tous les jours a une heure donnée, et en automatique envoyer le csv et les images mais avec quoi faire ca, car evidement ca se trouve sur le web

merci
Avec un programme externe, en php par exemple.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 20h35   #11
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Dom-Tom

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 10
Points : 10
Ne peut-on dire à Mysql d'exécuter cette requête tous les jours à heure fixe ?
Php, hélas, je ne connais pas grand chose.

merci de ton aide
phcm971 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 15h53   #12
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Dom-Tom

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 10
Points : 10
J ai trouvé chez mon hebergeur comment lancer une tache planifiee sur MySQL

mais si je lance ca

Code :
LOAD DATA INFILE 'test.csv' INTO TABLE TEST FIELDS TERMINATED BY ';'
Il importera mon fichier CSV, mais qu'adviendra t il des doublons ??

Merci
phcm971 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 16h29   #13
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 986
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 986
Points : 18 234
Points : 18 234
Envoyer un message via MSN à CinePhil
Dans le message #4, j'explique que le fichier csv est à importer dans une table vide à considérer comme temporaire !

Ensuite tu alimentes les vraies tables avec des requêtes, justement pour éviter les doublons !

Imaginons que tu doives importer une liste csv contenant des données sur le trafic généré par l'utilisateur de plusieurs applications.
Le fichier csv pourrait avoir cette structure :
date_heure, login, action, application

La table qui accueillera le fichier csv aura la même structure.

Ensuite dans ta BDD structurée, tu as par exemple les tables suivantes :
utilisateur (uti_id, uti_login...)
application (app_id, app_nom...)
uti_utiliser_app (uua_id_utilisateur, uua_id_application, uua_date, uua_action)

S'il y a de nouveaux utilisateurs à ajouter à la table utilisateur, tu fais cet enchaînement de requêtes, MySQL refusant de tester la table en cours de mise à jour :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TEMPORARY TABLE tmp
SELECT uti_login
FROM utilisateur;
 
INSERT INTO utilisateur(uti_login)
SELECT DISTINCT login
FROM import_csv
WHERE NOT EXISTS 
(
    SELECT * 
    FROM tmp
    WHERE tmp.uti_login = import_csv.login
);
Idem pour les applications éventuellement nouvelles (en supposant bien sûr qu'il n'y ait pas deux applications avec le même nom) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TEMPORARY TABLE tmp
SELECT app_nom
FROM application;
 
INSERT INTO application(app_nom)
SELECT DISTINCT application
FROM import_csv
WHERE NOT EXISTS 
(
    SELECT * 
    FROM tmp
    WHERE tmp.app_nom = import_csv.application
);
Ensuite, tu peux ajouter les nouvelles actions des utilisateurs, c'est à dire celles dont la date est supérieure à la date maxi de la table utilisation :
Code :
1
2
3
4
5
6
7
8
9
10
INSERT INTO uti_utiliser_app (uua_id_utilisateur, uua_id_application, uua_date, uua_action)
SELECT u.uti_id, a.app_id, i.date_heure, i.action
FROM import_csv i
INNER JOIN utilisateur u ON u.uti_login = i.login
INNER JOIN application a ON a.app_nom = i.application
WHERE i.date_heure > 
(
    SELECT MAX(uua_date)
    FROM uti_utiliser_app
)
C'est vite fait alors il y a peut-être des erreurs mais c'est le principe.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 17h51   #14
Futur Membre du Club
 
Inscription : mai 2004
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 37
Points : 16
Points : 16
Pour l'import des fichiers images, tu peux installer un serveur FTP (FileZilla Server) sur ton poste local (celui qui contient Access), et tu y accèdes depuis ton hébergement 1&1 : les fonctions FTP de PHP permettent de tout gérer. J'imagine que la liste de tes fichiers peut être déterminé par ta base access, que tu as précédemment importée dans mysql. J'ai mis ça en place pour la synchro d'une base d'articles sous sql server vers mysql, et ça fonctionne bien, mis en tache cron toutes les nuits. Bon courage !
Dertron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 02h27   #15
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 839
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 839
Points : 1 312
Points : 1 312
Oui mais quitte à, autan tout faire en gérant ça dans un script php qui te fait tout et tourne en cron. C'est plus simple et tu peux lier plus facilement les ressources externes à la bd comme ça (images, etc...)

ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h37.


 
 
 
 
Partenaires

Hébergement Web