Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum 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 07/07/2011, 00h12   #1
Invité de passage
 
Inscription : décembre 2008
Messages : 20
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 20
Points : 3
Points : 3
Envoyer un message via MSN à Dosix
Par défaut Demande aide optimisation requête SQL

Bonjour,

Je possède une base de données qui fait environs 114Mo, une table comporte 40 champs et contient 4600 données sachant que j'ai 72 tables donc 331 200 données.

Cette base contient des données météos et est réactualisé 4 fois par jours (toutes les 6h). Mon problème est que je met environs 72min pour réactualiser la base de données, en gros 1min par table pour réactualisé 331 200 données.

Chaque données (température, humidité..etc) sont contenu dans des fichiers txt pour chaque échéance (+1h, +2h, +3h...+72h) en gros 5694 fichiers txt.

Actuellement j'utilise une requête de type UPDATE, j'ouvre tout les fichiers (donc 40 fichiers) de la même échéance et ensuite je fais une requête UPDATE qui met à jours toute les données en même temps 72fois de suite.

J'aurai probablement la solution avec LOAD DATA INFILE cependant je rencontre quelques difficulté que je ne comprends malgré la lecture des docs.

Je vous montre mon code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
$sqla = "LOAD DATA LOCAL INFILE 'TMP2m_01.txt'
REPLACE INTO TABLE `data_01`
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n' IGNORE 1 LINES (`LONG`, `LAT`, `TMP_2M`); ";
 
$sqlb = "LOAD DATA LOCAL INFILE 'TMP500mb_01.txt'
REPLACE INTO TABLE `data_01`
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n' IGNORE 1 LINES (`LONG`, `LAT`, `TMP_500`); ";
 
 
$resulta = mysql_query($sqla);
$resultb = mysql_query($sqlb);
Admettons que j'ai une table avec ces champs là :

LONG | LAT | TMP_2M | TMP_500

Théoriquement avec cette requête tout les champs devraient se remplir et les données écrasées par les nouvelles si je recharge le fichier non ?

Car là ça me met tout à la suite mais seulement dans les champs LONG, LAT et TMP_2M et les données ne sont pas écrasées mais ajoutées, même avec le REPLACE..

Excusez moi pour le pâté au début c'est juste mettre dans l'ambiance de mon problème.

Cordialement Ludovic.
Dosix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 09h13   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

REPLACE INTO ne changera pas les tuples existants à moins que les données insérées ne correspondent à une clé déjà présente. Vérifie donc les clés de tes tables et vois si une autre clé candidate peut faire l'affaire.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre 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 21h40.


 
 
 
 
Partenaires

Hébergement Web