Requête MySQL besoin d'aide


julien__
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

Requête MySQL besoin d'aide

Message le Jeu Sep 15, 2011 3:26

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 !?!?

FloBaoti
WRInaute impliqué
WRInaute impliqué
 
Messages: 755
Inscription: 30 Avr 2006

Re: Requête MySQL besoin d'aide

Message le Jeu Sep 15, 2011 9:33

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...


julien__
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

Re: Requête MySQL besoin d'aide

Message le Jeu Sep 15, 2011 12:45

FloBaoti a écrit: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...


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Requête MySQL besoin d'aide

Message le Jeu Sep 15, 2011 13:00

En MySQL je ne vois pas, en PHP c'est faisable avec explode, foreach, array_unique.


julien__
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

Re: Requête MySQL besoin d'aide

Message le Jeu Sep 15, 2011 13:57

spout a écrit:En MySQL je ne vois pas, en PHP c'est faisable avec explode, foreach, array_unique.


Bon alors ça je sais le faire, merci.


julien__
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

Re: Requête MySQL besoin d'aide

Message le Mer Sep 21, 2011 13:39

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é
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: Requête MySQL besoin d'aide

Message le Mer Sep 21, 2011 16:33

julien__ a écrit: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
WRInaute occasionnel
 
Messages: 362
Inscription: 28 Déc 2006

Re: Requête MySQL besoin d'aide

Message le Mer Sep 21, 2011 17:02

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?!


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité