Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en 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 02/06/2004, 11h25   #1
Nouveau Membre du Club
 
Avatar de Jovial
 
Inscription : avril 2004
Messages : 55
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : avril 2004
Messages : 55
Points : 26
Points : 26
Par défaut petit soucis lors d'un LOAD DATA INFILE

Bonjour à tous

voici mon petit soucis :

j'ai une table contact avec plein de champ divers (nom, prenom,...) et un champ userID reliant ce contact à un utilisateur.

je me sers d'un load data infile pour transférer des contacts venant d'un fichier csv vers ma base.
Le fichier csv contient pas mal d'information utile pour les lignes contact, mais il ne contient pas l'userID.

Bref quand j'effectue mon load data infile, le champ userID prend la valeur par défaut que j'ai fixé (0) et ensuite je modifie toute les entrées dans la table contact ayant l'userID à 0 en affectant la bonne valeur de l'userID.

bon ca marche mais c'est pas du tout bon puisque si deux lectures de fichiers sont faites simultanement y'a rien qui empeche qu'un utilisateur se retrouve avec les contacts de quelqu'un d'autre.

enfin voilà, si quelqu'un a compris tout ce que j'ai dit ici, et qu'il voit une solution à mon probleme...

voili voilou, merci d'avance
Jovial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2004, 13h16   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
la seule solution serait de rajouter ce champs au moment de l'exportation
comment crées tu le fichier csv ?
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2004, 13h20   #3
Nouveau Membre du Club
 
Avatar de Jovial
 
Inscription : avril 2004
Messages : 55
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : avril 2004
Messages : 55
Points : 26
Points : 26
bah justement c'est une exportation via outlook par exemple ou eudora...
en fait le but est de récupérer des contacts externes donc je peux pas vraiment rajouter ce qu'il faut dans le csv :-(
Jovial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2004, 13h24   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
en fait après relecture, je crois que je n'avais pas bien compris ton problème
ce que je n'ai pas encore compris c'est quand tu parle de "2 lectures d'un fichier" .. tu parle de quel fichier ? comment le fichier pour être lu 2 fois en même temps ?
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2004, 13h30   #5
Nouveau Membre du Club
 
Avatar de Jovial
 
Inscription : avril 2004
Messages : 55
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : avril 2004
Messages : 55
Points : 26
Points : 26
oui c'est fort probable que ce soit pas clair
imagine deux utilisateurs (deux userID différent) qui décide d'importer une liste de contact (*.csv) au meme moment. La table de contact étant commune (on sait à qui appartient le contact grace au champ userID), ils vont insérer dans la base grace à la commande LOAD DATA INFILE leur liste de contact. Ensuite mon code effectue le traitement suivant. il modifie les lignes de la table avec userID = 0 (valeur par défaut) en leur donnant la valeur de l'userID qui est connecté.
Si y'a qu'un utilisateur qui fait ca, ca marche, mais s'ils sont deux, va y avoir tout leurs contacts qui vont avoir le champ userID à 0 donc l'un des deux va se retrouver avec des contacts qui ne lui appartiennent pas et l'autre va lui en manquer.

Est ce que c'est plus clair
en fait ils lisent en meme temps un fichier csv mais c'est pas le meme.
Jovial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2004, 14h20   #6
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
ok là j'ai compris

ce que je te propose c'est d'ouvrir le fichier en PHP, de le découper et de insérer dans la base les enregistrement avec les ID déjà renseignés
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2004, 14h23   #7
Nouveau Membre du Club
 
Avatar de Jovial
 
Inscription : avril 2004
Messages : 55
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : avril 2004
Messages : 55
Points : 26
Points : 26
ouais ca c'est la méthode chiante que je risque de devoir appliquée !
et puis faudra que je le fasse en jsp puisque c'est avec cela que je bosse...

merci quand meme :-(
Jovial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2004, 15h00   #8
Nouveau Membre du Club
 
Avatar de Jovial
 
Inscription : avril 2004
Messages : 55
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : avril 2004
Messages : 55
Points : 26
Points : 26
ou alors, n'y aurait il pas quelquechose permettant de bloquer l'acces à la bdd durant une suite d'opérations ?
Jovial est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2004, 15h06   #9
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
avec LOCK ou avec des transactions mais je n'ai aucune idée si c'est bien du point de vue performance ou pas
http://dev.mysql.com/doc/mysql/fr/LOCK_TABLES.html
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2004, 11h58   #10
Nouveau Membre du Club
 
Avatar de Jovial
 
Inscription : avril 2004
Messages : 55
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : avril 2004
Messages : 55
Points : 26
Points : 26
bah j'ai réglé mon problème en lockant la table durant les opérations.
je verrai plus tard si cela pose des problèmes de performances.
j'ai aussi du dropper un clé unique le temps de l'insertion et de la remettre après.

Donc c'est un peu lourd mais ça tourne

verrai plus tard si ça va
Jovial est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h47.


 
 
 
 
Partenaires

Hébergement Web