|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() |
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 de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 531 ![]() |
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 :
Supprimer les lignes de la vue : Code :
DELETE FROM latable WHERE b IN (SELECT b FROM doublons ORDER BY b) Code :
INSERT INTO latable SELECT * FROM doublons |
||
|
00
|
|
|
#3 |
![]() ![]() |
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 de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 531 ![]() |
Saluton,
C'est ce dont je te prévenais par Citation:
Bon courage. |
|
|
00
|
|
|
#5 |
![]() ![]() |
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 de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
Copyright © 2000-2012 - www.developpez.com