IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

petit soucis lors d'un LOAD DATA INFILE


Sujet :

SQL Procédural MySQL

  1. #1
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    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

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 353
    Points : 15 699
    Points
    15 699
    Par défaut
    la seule solution serait de rajouter ce champs au moment de l'exportation
    comment crées tu le fichier csv ?

  3. #3
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    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 :-(

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 353
    Points : 15 699
    Points
    15 699
    Par défaut
    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 ?

  5. #5
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    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.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 353
    Points : 15 699
    Points
    15 699
    Par défaut
    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

  7. #7
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    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 :-(

  8. #8
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    ou alors, n'y aurait il pas quelquechose permettant de bloquer l'acces à la bdd durant une suite d'opérations ?

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 353
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 353
    Points : 15 699
    Points
    15 699
    Par défaut
    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

  10. #10
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LOAD DATA INFILE] clé auto incrémentés
    Par ashurai dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/02/2006, 17h17
  2. [DEBUG] petit souci lors de la compilation...
    Par alex6891 dans le forum C
    Réponses: 11
    Dernier message: 29/09/2005, 23h16
  3. Réponses: 5
    Dernier message: 18/04/2005, 12h38
  4. probleme avec "LOAD DATA INFILE" et les b
    Par Koo dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/07/2004, 09h37
  5. Problème avec LOAD DATA INFILE
    Par ka0z dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 04/06/2004, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo