Requête MySQL besoin d'aide

julien__

WRInaute occasionnel
Bonsoir,

Je voudrais faire une requête qui me retourne tous les enregistrements qui ont un doublon, sur ce principe.

"le champ personne" exemple ci-dessous...

'Julien Lepers,Antoine Brévin,Jean Decoin,Antoine Brévin,George Arigton'

Dans cette chaine de caractère avec des noms séparés par des virgules, il y a deux fois le même nom (Antoine Brévin)

Je voudrais donc une requête qui me retourne tous les champs qui possèdent deux fois le même nom (ou plus)

C'est un champs TEXT, dont les noms sont séparés par des virgules. Il me faudrait une expression régulière, mais en MySQL !?!?
 

julien__

WRInaute occasionnel
FloBaoti a dit:
Si je peux me permettre, la conception de ta table est complètement à revoir. Tu ne respectes même pas la 1ère Forme Normale (Les attributs contiennent une valeur atomique).
http://fr.wikipedia.org/wiki/Forme_normale_%28bases_de_donn%C3%A9es_re ... nnelles%29

Par conséquent, tu ne pourras rien faire de viable avec une telle conception...

C'est juste un champ informatif, il n'y a pas de requêtes qui se fait dessus. C'est juste un mini résumé, facilement accessible dans cette table. Tous les noms se trouvent dans une table noms. Toutefois, j'ai des doublons dans ce champ, et sa fait tâche, il faut que je m'en débarrasse.
Tu ne connais pas une manière de supprimer les autres occurrences d'une chaîne dans une chaîne, et ceci au niveau MySQL, sans PHP. Sinon en PHP...
 

julien__

WRInaute occasionnel
Bon je reviens sur ce post pour vous montrer comment j'ai fait avec MySQL n'avait pas le temps de faire ça en PHP.
Donc en résumé j'avais une base de données comportant 7000 entrées, et dont un champ comportait des doublons sur environ une 100 d'enregistrements. le champ en question se compose comme suit : nom1,nom2,nom3,nom4,nom1,nom5

Comment retrouver les champs qui ont un doublon dans un champ texte dont les entrées sont séparées par des virgules.

SELECT champ FROM mabase WHERE LENGTH(SUBSTRING_INDEX(champ,SUBSTRING(champ,LENGTH(SUBSTRING_INDEX( champ, ',', 1 ))+2,LENGTH(SUBSTRING_INDEX( champ, ',', 2 ))-LENGTH(SUBSTRING_INDEX( champ, ',', 1 ))) ,2)) < LENGTH(champ) AND champ LIKE '%,%'

cette requête m'a permis de les retrouver pour les traiter manuellement.
 

Julia41

WRInaute passionné
julien__ a dit:
Bon je reviens sur ce post pour vous montrer comment j'ai fait avec MySQL n'avait pas le temps de faire ça en PHP.
Donc en résumé j'avais une base de données comportant 7000 entrées, et dont un champ comportait des doublons sur environ une 100 d'enregistrements. le champ en question se compose comme suit : nom1,nom2,nom3,nom4,nom1,nom5

Comment retrouver les champs qui ont un doublon dans un champ texte dont les entrées sont séparées par des virgules.

SELECT champ FROM mabase WHERE LENGTH(SUBSTRING_INDEX(champ,SUBSTRING(champ,LENGTH(SUBSTRING_INDEX( champ, ',', 1 ))+2,LENGTH(SUBSTRING_INDEX( champ, ',', 2 ))-LENGTH(SUBSTRING_INDEX( champ, ',', 1 ))) ,2)) < LENGTH(champ) AND champ LIKE '%,%'

cette requête m'a permis de les retrouver pour les traiter manuellement.
Une autre technique aurait été d'INSERT ces "noms" dans une nouvelle table avec un INDEX UNIQ, et en cas de doublon ON DUPLICATE KEY... Du coup après tu as ton truc "propre".
 

julien__

WRInaute occasionnel
En fait je l'ai cette table avec les noms sans doublon, mais comment corriger le champ de la première table avec les doublons?!
 

Discussions similaires

Haut