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

MySQL Discussion :

update en masse


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Par défaut update en masse
    Bonjour,

    J'ai besoin de mettre à jour plusieurs lignes dans une table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    contact(id,
    nom,
    prenom,
    mobile,
    tel,
    email,
    fax)
    . la mise à jour se fait chaque fois par rapport à une colon différente ( par fois la mise à jour se fait en prenant "mobile" comme référence, par fois email ...).
    Au lieux de lancer une requête pour chaque mise à jour j'ai créé une table temporaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    contact_temp(id,
    nom,
    prenom,
    mobile,
    tel,
    email,
    fax)
    dans laquelle j’insère les contacts à jour puis je lance la requête suivante (cas où le critère d'identification est l'email):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update contact c, contact_temp c_t  set c.nom=c_t.nom, c.prenom=c_t.prenom, c.mobile=c_t.mobile, c.tel=c_t.tel, c.email=c_t.email, c.fax=c_t.fax where c.email=c_t.email
    Le problème c'est que cette requête est trop lente surtout si le nombre de contacts à mettre à jour est de l'ordre de 20000.
    Y a t il d'autres alternative ou devrais-je modifier la requête pour améliorer les performance?
    BN: j'utilise java/JDBC.
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    D'où proviennent les données de mise à jour ?

    Si toutes les colonnes de la table temporaire sont renseignées pour chaque ligne avec le mixage adéquat des données à conserver et des données à mettre à jour, alors il faut faire la jointure sur l'identifiant et mettre à jour toute la table.

    Et au passage, les jointures s'écrivent depuis 1992 avec l'opérateur JOIN !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éclairé Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Par défaut
    Merci pour la réponse.
    Les données proviennent d'un fichier CSV, La mise à jours ne s’effectue pas sur toutes les données. et l'identifiant varie selon le choix de l'utilisateur.
    Concernant votre réponse, pouvez vous m'expliquer un peu plus votre idée?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Peux-tu être plus précis ?
    Citation Envoyé par archer Voir le message
    Les données proviennent d'un fichier CSV,
    La structure du fichier et quelques lignes exemples avec des données anonymisées aideraient donner la solution.

    La mise à jours ne s’effectue pas sur toutes les données.
    Veux-tu dire que :
    1) Toutes les lignes de la table ne sont à mettre à jour ?
    2) Des colonnes du fichier CSV sont vides pour certaines lignes ?

    et l'identifiant varie selon le choix de l'utilisateur.
    Là je ne comprends plus ! Qu'est-ce que l'utilisateur vient faire là dedans ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Par défaut
    Tout d'abord merci pour l'intérêt que vous portez à mon problème.
    En fait l'application permet aux utilisateurs d’insérer des contacts puis de les mettre à jour en cas de besoin.
    chaque contact fait référence à l'utilisateur qui l'a insérer (relation père fils entre les tables user et contact)
    parfois l'utilisateur veut apporter des mises à jour à sa liste de contacts. donc il sélectionne le fichier CSV qui contient les contacts à jour. le fichier ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nom;prenom;mobile;tel;email;fax
    kim;archer;xxx;yyy;a@gmail.com;zzz
    pour mettre à jour un contact, l'utilisateur ne connait pas les identifiants attribué par notre base de donnée à chaque contact. Donc on lui laisse le libre choix de définir l'un des champs: mobile,tel, email ou fax comme identifiant (puisqu'il est unique) du contact.
    Si je ne suis pas bien exprimé, veuillez me le mentionner.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    C'est là que ça devient bizarre ton truc !
    Citation Envoyé par archer Voir le message
    donc il sélectionne le fichier CSV qui contient les contacts à jour.


    Pourquoi utiliser un fichier CSV alors que tu as une BDD ?

    Les contacts de l'utilisateur sont bien enregistrés en BDD ?
    Donc ton interface utilisateur doit simplement interroger la BDD et permettre de modifier un contact ! Classique quoi ! Je ne vois pas pourquoi tu t'embêtes avec un fichier CSV ! Il vient d'où ? Généré par quoi ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    J'ai quand même du mal à piger le processus de ton machin !

    D'abord, tu sembles nous parler de mise à jour en masse, comme le suggère le titre de ton premier message :
    J'ai besoin de mettre à jour plusieurs lignes dans une table:
    ...
    Les données proviennent d'un fichier CSV
    Puis le processus semble plutôt correspondre à une mise à jour des contacts un par un :
    pour mettre à jour un contact, l'utilisateur ne connait pas les identifiants attribué par notre base de donnée à chaque contact. Donc on lui laisse le libre choix de définir l'un des champs: mobile,tel, email ou fax comme identifiant (puisqu'il est unique) du contact.
    La manière classique pour un utilisateur de gérer ses contacts est à mon avis plutôt celle-ci :
    1) => L'utilisateur demande l'affichage de la liste de ses contacts.
    2) <= Le système interroge la BDD et affiche la liste avec les identifiants masqués.
    3) => L'utilisateur sélectionne un contact et demande l'affichage de son détail.
    4) <= Le système utilise l'identifiant masqué du contact choisi et interroge la BDD pour afficher le détail du contact.
    5) => L'utilisateur met à jour de une à plusieurs données du contact et demande l'enregistrement du contact.
    6) <= Le système récupère toutes les données du formulaire et met à jour le contact en BDD (encore grâce à son identifiant caché) puis affiche un message de succès à l'utilisateur.

    La mise à jour en masse correspondrait plutôt au processus suivant :
    1) <= Extraction de la liste des contacts de l'utilisateur dans un fichier CSV lisible par un tableur, y compris l'identifiant de chaque contact qui est cette fois-ci visible par l'utilisateur.
    2) => L'utilisateur modifie le fichier avec son tableur préféré, l'enregistre et redonne le fichier à celui qui a les droits pour le réinjecter dans la BDD.
    3) => Importation du fichier dans une table temporaire.
    4) => Mise à jour de la table des contacts à partir de la table temporaire en faisant une jointure sur l'identifiant.

    Quel est ton processus ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre éclairé Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Par défaut
    Bonjour,
    le deuxième processus: La mise à jour en masse.

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Et donc pourquoi ne pas faire la jointure sur l'identifiant ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre éclairé Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Par défaut
    comment faire?

  11. #11
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ben c'est ta requête, modifiée avec les jointures normalisées et remise en forme, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE contact c
    INNER JOIN contact_temp c_t ON c.id = c_t.id 
    SET c.nom=c_t.nom, 
        c.prenom=c_t.prenom, 
        c.mobile=c_t.mobile, 
        c.tel=c_t.tel, 
        c.email=c_t.email, 
        c.fax=c_t.fax
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. update en masse avec un where dynamique
    Par kheironn dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/06/2008, 17h01
  2. Problème d'update en masse
    Par david71 dans le forum DB2
    Réponses: 2
    Dernier message: 24/01/2008, 17h16
  3. update en masse
    Par geckobleu dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/01/2008, 21h58
  4. Update de masse version 2
    Par GuyLafleur dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/10/2005, 14h09
  5. update de masse
    Par Invité dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/10/2005, 01h34

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