|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre confirmé
![]() ![]() Inscription : mars 2003 Messages : 1 043 ![]() |
Bonjour à tous,
Je dois parser un txt de 35 000 lignes environ afin de remplir deux tables mysql. Chaque ligne du txt comprend une vingtaine de données séparées par ";" La première donnée est une sorte de préfixe : Si c'est A, on remplit la table A. Si c'est B, la table B Je fais : Code :
Comment pourrais-je optimiser tout ça ? Merci d'avance pour vos précieux conseils. |
||
|
|
00
|
|
|
#2 |
|
Invité régulier
![]() Analyste Programmeur Inscription : septembre 2011 Messages : 10 ![]() |
Bonjour ^^
J'avais eu le même problème, j'avais trouvé une petite ligne magique... Ça m'avait permis de contourner le max_execution ! Bonne journée =) |
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() ![]() Inscription : mars 2003 Messages : 1 043 ![]() |
Bonjour,
Effectivement, c'est une idée... Mais cela n'empêche pas que mon code doit pouvoir être optimisé... Mais merci quand même ! |
|
|
00
|
|
|
#4 | ||
![]() ![]() Josselin Développeur Web Inscription : janvier 2004 Messages : 9 050 ![]() |
Il faut déjà éviter, comme dans ton script actuel, de faire 35000 requêtes d'insertion. Donc tu peux commencer par construire une requête d'INSERT avec plus d'une "values". Exemple :
Code sql :
Sinon, si ton fichier texte est un CSV correctement formé, tu peux faire un LOAD DATA INFILE. |
||
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() ![]() Inscription : mars 2003 Messages : 1 043 ![]() |
Bonjour,
Un insert d'une valeur... et un update pour le reste ? Mon fichier est un .dat très bien formaté. Je vais regarder du côté de LOAD DATA INFILE , je ne connais pas. Merci ! |
|
|
00
|
|
|
#6 | ||
![]() ![]() Josselin Développeur Web Inscription : janvier 2004 Messages : 9 050 ![]() |
Heu, mais dans ce cas là tu n'auras qu'un seul enregistrement dans ta base. Non, quand tu fais un INSERT, tu n'es pas obligé de faire une seule requête par ligne insérée, tu peux insérer plusieurs lignes en une seule requête (cf le message au-dessus).
En PHP, tu pourrais la construire comme ça : Code :
|
||
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() ![]() Inscription : mars 2003 Messages : 1 043 ![]() |
Ah, OK !!!
Je teste de suite |
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
c'est un CSV utilise fgetcsv et non explode
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#9 |
|
Membre confirmé
![]() ![]() Inscription : mars 2003 Messages : 1 043 ![]() |
@stealth35 : merci, je vais tester aussi.
@Bisûnûrs : pour ce qui est des inserts je gagne du temps et ça fonctionne impec. Le problème (mais je l'avais pas précisé au début) c'est que j'ai besoin de refaire un passage avec un update. Et comme je mets la requête INSERT dans une chaine que j'exécute avec un seul mysql_query, ça se passe après la boucle...donc après l'UPDATE. Et bien sûr ça va plus. A moins que tu saches comment créer le UPDATE aussi dans une chaîne que je pourrai exécuter après la boucle et le INSERT... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com