|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre régulier
![]() Inscription : mai 2004 Messages : 121 ![]() |
Bonjour à tous,
Je vais exposer mon problème clairement : J'ai des enregistrements présents dans des fichiers( ayant le même formatage ) que je dois lire afin de mettre à jour une table principale. Les fichiers étant assez volumineux, j'utilise la fonction MySQL LOAD DATA INFILE pour chaque fichier dans une table TMP. Jusque là, pas de problème. Maintenant, lors du contrôle des données( c'est à dire apres que tout les LOAD DATA INFILE soient passés), je dois connaitre la ligne et le nom du fichier(non présent dans la table et ni dans le formatage du fichier) qui a présenté un défaut. Donc dans ma table TMP, j'ai ajouté un champ ligne avec un auto-increment pour connaitre la ligne qui pose probleme. Pour un fichier, ca fonctionne mais pour deux, l'auto-increment reprends normalement à la suite du dernier enregistrement(soit la derniere ligne du fichier précédent). Je me suis dis, tiens je vais faire plusieurs table temporaire avec le même squelette que ma table TMP(que je nommerai différemment via PHP). Exemple : Code :
Code :
C'est une idée, pourquoi pas, et je pose maintenant ma question : Dans ma table TMP(seule à l'origine), j'utilisait un GROUP BY afin de connaitre la somme de tous les nombres avec le même indicateur, même colonne et même unité. Est il possible de refaire la même opération avec ce nouveau concept ? Sinon est il possible de "concaténer" plusieurs table de même squelette pour n'en faire qu'une ? Merci beaucoup par avance |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() Pierre CabocheInscription : octobre 2005 Messages : 2 197 ![]() |
Bon, plusieurs choses:
1) tu aurais peut-être meilleur temps d'écrire un petit programme qui te rajoute les numéros de ligne dans tes fichiers 2) sinon, tu enlèves la contrainte PRIMARY KEY (`ligne`) et entre 2 chargement de fichiers, tu remets le AUTO_INCREMENT à 1 (ALTER TABLE...). A essayer, je ne sais pas si ça marche. Du coup, tu n'as plus besoin de faire un GROUP BY sur 2 tables, mais je vais quand même répondre à la question : 3) soit tu fais un: Code :
4) soit tu fais une MERGE TABLE puisque tes tables sont en MyISAM Je préfère la solution 2
__________________
Derniers articles: (SQL Server) Introduction à la gestion des droits (UML) Souplesse et modularité grâce aux Design Patterns (UML) Le Pattern Etat Autres articles... |
||
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : mai 2004 Messages : 121 ![]() |
Salut Pcaboche,
Merci pour ton intervention. pour ta solution 1, je la mets de coté car elle sera la solution de dernier recours Pour la deux, je viens d'essayer mais ca ne marche pas Pour la 3 et 4, ca pourrait faire l'affaire, merci beaucoup en tout cas pour ton intervention. a+ |
|
|
00
|
|
|
#4 |
![]() ![]() Pierre CabocheInscription : octobre 2005 Messages : 2 197 ![]() |
Comme indiqué plus haut, j'avais de sérieux doutes par rapoort à la 2.
Ravi de t'avoir aidé.
__________________
Derniers articles: (SQL Server) Introduction à la gestion des droits (UML) Souplesse et modularité grâce aux Design Patterns (UML) Le Pattern Etat Autres articles... |
|
00
|
|
|
#5 | |
|
Membre régulier
![]() Inscription : mai 2004 Messages : 121 ![]() |
Citation:
|
|
|
|
00
|
|
|
#6 |
![]() ![]() Pierre CabocheInscription : octobre 2005 Messages : 2 197 ![]() |
Je viens de penser à une autre solution si tu as de nombreux fichiers (parce que créer autant de tables que de fichiers, c'est peut-être un peu lourd):
Tu aurais 2 tables: tmp1 (avec AUTO_INCREMENT) et tmp2 (avec AUTO_INCREMENT) tu fais : - un LOAD DATA INFILE dans tmp1 (ça t'incrémente la ligne) - un : - un TRUNCATE TABLE tmp1 (vide la table, remet l'AUTO_INCREMENT à 1) - tu recommences la manoeuvre avec un autre fichier Comme ça, t'as tous les enregistrements dans tmp2, avec les bons numéros de ligne (qui n'est donc plus vraiment une table temporaire)
__________________
Derniers articles: (SQL Server) Introduction à la gestion des droits (UML) Souplesse et modularité grâce aux Design Patterns (UML) Le Pattern Etat Autres articles... |
|
00
|
|
|
#7 | |
|
Membre régulier
![]() Inscription : mai 2004 Messages : 121 ![]() |
Citation:
Pour te prouver pourquoi je reste sur le LOAD INTO FILE avec une MERGE, sur la version précedente, le script mettais 40min à s'executer. Maintenant, je mets 7min Il ne faut pas oublier que le LOAD INTO FILE est 20x plus rapide qu'un INSERT. Merci encore, bonne soirée à toi Kev Je pense rester sur cette version si tous les tests s'avèrent positifs |
|
|
|
00
|
|
|
#8 | |
![]() ![]() Pierre CabocheInscription : octobre 2005 Messages : 2 197 ![]() |
Citation:
Essaye et tu verras...
__________________
Derniers articles: (SQL Server) Introduction à la gestion des droits (UML) Souplesse et modularité grâce aux Design Patterns (UML) Le Pattern Etat Autres articles... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com