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

Requêtes MySQL Discussion :

Doublons à fusionner


Sujet :

Requêtes MySQL

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut Doublons à fusionner
    J'ai 684 doublons (donc 1368 lignes) dans une table que j'aimerais fusionner.

    Sans entrer dans le détail de la composition exacte de ma table (issue d'un fichier texte), disons qu'elle est composée des colonnes a, b, c et d.
    Soit un doublon représenté par les lignes suivantes :
    ----a----||----b----||----c----||----d----
    ---DE---||--id1--||----------||--infod--
    ---FR---||--id1--||--infoc--||----------

    On voit ci-dessus que le doublon est défini par le fait que les deux lignes ont id1 dans la colonne b.
    Sachant qu'au final, je ne garderai que la ligne avec FR en colonne a, je souhaiterais récupérer infod de la colonne d pour compléter ma ligne à garder.

    S'il n'y avait que quelques doublons, je le ferais à la main. Mais 684 doublons dans une table de 35 millions de lignes, je cherche plutôt un système automatique pour le faire.

    En gros le principe c'est :
    - si j'ai une ligne de doublon avec FR, je récupère les infos manquantes de ma ligne à garder à partir de la ligne à détruire.
    - si j'ai deux lignes FR ou deux lignes pas FR, je garde une ligne en la complétant le plus possible avec les infos de l'autre.

    Une idée ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    La seule chose qui me vienne à l'idée c'est d'extraire les doublons en les agrégeant dans une table temporaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TEMPORARY doublons AS
    SELECT GROUP_CONCAT(lt.a SEPARATOR '|') a, lt.b,
     GROUP_CONCAT(lt.c SEPARATOR '|') c, 
     GROUP_CONCAT(lt.d SEPARATOR '|') d
    FROM latable lt
    WHERE 2=(SELECT COUNT(lt2.b) FROM latable lt2 WHERE lt2.b=lt.b GROUP BY lt2.b)
    Il faut ensuite faire le ménage dans les colonnes a, c et d des 684 lignes de la vue, là va falloir bidouiller, peut-être en langage procédural.
    Supprimer les lignes de la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM latable WHERE b IN (SELECT b FROM doublons ORDER BY b)
    puis réinsérer les lignes nettoyées de la vue dans latable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO latable SELECT * FROM doublons
    J'avoue que ce qui m'inquiète beaucoup c'est la sous-requête corrélée sur une table de 35 millions de lignes.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Le problème, c'est que GROUP CONCAT va garder les deux valeurs d'une colonne lorsque celle-ci est renseignée dans les deux lignes alors que ce que je veux c'est alimenter les colonnes vides de la ligne à garder avec les valeurs de la ligne à détruire. Mais lorsque la ligne à garder a déjà une valeur dans une colonne, je ne veux pas changer cette colonne.

    Si ce n'est pas faisable en MySQL, je peux essayer en PHP. Le tableau des lignes en double fait 1368 lignes, ce n'est pas encore énorme.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    C'est ce dont je te prévenais par
    Il faut ensuite faire le ménage dans les colonnes a, c et d des 684 lignes de la vue, là va falloir bidouiller, peut-être en langage procédural.
    En php en triturant les GROUP_CONCAT àcoup d'explode, ou avec des regex, ça ne devrait pas être bien compliqué. L'intérêt c'est que tu peux travailler sur les doublons extraits jusqu'à être sur du nettoyage avant de faire l'insertion.
    Bon courage.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Finalement, j'avais très peu de vrais doublons de ce type.
    J'ai corrigé à la main.
    Merci quand même pour l'idée.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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. Fusionner les cellules des doublons dans excel
    Par sihammaster dans le forum VB.NET
    Réponses: 8
    Dernier message: 10/05/2010, 11h28
  2. [Debutant] Fusionner des lignes en doublons
    Par irouni dans le forum Langage
    Réponses: 16
    Dernier message: 27/04/2010, 09h51
  3. [XL-2003] Fusionner des lignes en doublons
    Par pointp dans le forum Excel
    Réponses: 13
    Dernier message: 14/04/2010, 12h23
  4. [AC-2003] Fusionner doublons table avec dépendances
    Par Rodolphe29 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/09/2009, 13h45
  5. Fusionner sans doublons dans une requète
    Par Michaël HENNEQUIN dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/02/2009, 16h27

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