Requête multi-instructions avec MySQL

Requête multi-instructions avec MySQL - PHP - Programmation

Marsh Posté le 05-06-2007 à 14:12:17    

Voila, je dois effectuer une migration de données d'un fichier vers ma table (une ligne du fichier correspond a une insertion). Mon fichier est assez gros (plus de 10000 lignes). Pour l'instant, j'ai une requete du style
"INSERT INTO ma_table (... , ... , ...);" que j'éxécute en boucle (au meme moment que je récupère les lignes du fichier).
 
Le problème, c'est que cela prend un temps fou pour effectuer la migration (plus de 30 secondes).  
 
J'avais donc pensé pouvoir concaténer tous les insert dans une seule énorme requête que je n'exécuterais qu'une seule fois, mais je n'y arrive pas... il semble que la fonction mysql_query() ne supporte pas plus d'une instruction par requête. Pourtant, quand je teste mon énorme requête dans l'interface de PhpMyAdmin, il arrive très bien à tout exécuter a la suite, et c'est beaucoup plus rapide que mon algo actuel (1 requete par instruction).
 
Voila, si quelqu'un a une solution, je suis au bord du gouffre la...
 

Reply

Marsh Posté le 05-06-2007 à 14:12:17   

Reply

Marsh Posté le 05-06-2007 à 14:21:45    

tu peux faire plusieurs insertions au sein de la meme requeet :  
( de mémoire )  
insert into matable(chp1,chp2,..) VALUES (val1,val2,..) , (val5,val14,..)

Reply

Marsh Posté le 05-06-2007 à 14:30:05    

Tu peux aussi envisager d'utiliser le client mysql en ligne de commande, qui n'est pas soumis au timeout d'apache.


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 05-06-2007 à 14:52:31    

Reply

Marsh Posté le 05-06-2007 à 15:10:17    

cgo2 a écrit :

Tu peux aussi envisager d'utiliser le client mysql en ligne de commande, qui n'est pas soumis au timeout d'apache.


d'apache?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 05-06-2007 à 15:21:50    


 
je suppose qu'il parle de ça quand il fait allusion aux 30 secondes.


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 05-06-2007 à 16:08:24    

J'aurais plutôt pensé à quelque chose style php...


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 07-06-2007 à 14:38:36    

C'est toujours moi. La fonction LOAD DATE INFILE qu'a proposé anapajari semble être la meilleure solution. Cependant, j'ai une erreur que je n'arrive absolument pas a voir, j'ai meme refait l'exemple montré sur un site parlant de cette fonction et mon erreur persiste....
ya une configuration particulière a avoir ?

Reply

Marsh Posté le 07-06-2007 à 14:44:01    

ne nous donen surtout pas l'erreur en question , ca nous aiderai  [:noxauror]

Reply

Marsh Posté le 07-06-2007 à 16:13:16    

Je pars du principe que vous etes des oufs, c'est tout
 
Ma requete :
LOAD DATA INFILE ‘fichier.csv’
INTO TABLE members
FIELDS
TERMINATED BY ';'
ENCLOSED BY ‘”’
ESCAPED BY '\\'
LINES
STARTING BY ''
TERMINATED BY '\n'
(id, champ1, champ2)
 
L'erreur :
#1064 - Erreur de syntaxe pr�s de '‘fichier.csv’
INTO TABLE members
FIELDS
TERMINATED BY ';'' � la ligne 1  
 

Reply

Marsh Posté le 07-06-2007 à 16:13:16   

Reply

Marsh Posté le 07-06-2007 à 16:17:01    

s'koi ces quotes moldaves autour de ton nom de fichier?

Reply

Marsh Posté le 07-06-2007 à 16:20:19    

Oh mais non quoi... merci bien !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed