Page 1 sur 1

doublons de valeurs dans un même champs

Posté : 03 déc. 2014, 17:26
par jdawson
Bonjour

j ai une base de donné avec NOM PRENOM ADRESSE ....

Dans mon champ prénom j'ai Paul, Pierre, Jacques ... normal quoi
mais j ai parfois aussi Pierre Jacques Jacques
ou Marie Marie
ou marie pierre marie pierre ..

bref des doublons

peut ton par une requête remonter les enregistrements posant problème, ou le prénom contient des valeurs répétees dans le champs lui même,
cela permet au moins de reperer les enregistrement ou il faudrait intervenir dans le prénom

merci par avance de votre aide

Cordialement

Jdawson

Re: doublons de valeurs dans un même champs

Posté : 05 déc. 2014, 15:15
par Mazarini
un truc dans ce genre :
select * a from taTable where left(prenom,(length(prenom)-1)/2) =  right(prenom,(length(prenom)-1)/2)
Les enregistrements dont la première moitié = la seconde moitié (en prenant un compte le ' ' au milieu)

Voir FLOOR(nombre) si problème de nombre non entier.

Re: doublons de valeurs dans un même champs

Posté : 08 déc. 2014, 12:58
par jdawson
bonjour mazarini,

je viens de voir ta réponse, merci à toi,

j ai adapté ta requête à ma table mais ça donne rien de probant,

ca me remonte 129 lignes mais pas de ligne ou dans le champs prénom j ai deux fois la même chose du style Robert Robert

désolé ( à moins que j ai loupé quelques chose ) ta requête marche mais cela me remonte des lignes ou prénom est vide et quand ce n est pas vide ce ne sont pas des lignes ou le prenom est répété,

merci quand même :)

jdawson

Re: doublons de valeurs dans un même champs

Posté : 08 déc. 2014, 14:57
par jdawson
je me réponds a moi même pour éclaircir ma question

dans la zone prénom j ai un ou plusieurs prénom séparé par des espaces.. combien je sais pas trop 3 4 maximum je suppose car c est un résulat de saisie manuelle donc on peut envisager tout et n importe quoi
donc nous avons 1 2 3 4 prénom avec parfois donc des doublons dans les prénoms, même du type marie christine marie christine, marie marie, paul edouard paul ... etc ..

mon but en fait est dans un premier temps de trouver comment dire à mon client les lignes posant problème avec une répétition à l intérieur, qu importe la répétition, si déjà la personne en face peut nettoyer son fichier avec mon aide, ce serai déjà pas mal,

voilà voilà .. je sais pas si c est plus clair ...

Merci !!
jdawson

Re: doublons de valeurs dans un même champs

Posté : 10 déc. 2014, 01:51
par tesmet
Si la requête proposée n'a pas donné le résultat attendu, alors il peut donc y avoir plus d'un espace entre les doublons?

C'est qu'elle base de données? Avec Oracle je crois qu'on peut écrire
SELECT * FROM ma_table WHERE REGEXP_LIKE(prenom, '[:<:]([^[:blank:]]+).+\1', 'i')
REGEXP de mySQL ne supporte pas les références arrières, mais avec php l'on pourrait écrire pour UTF-8
$query = mysqli_query($db, 'SELECT id,prenom FROM ma_table');
while($data=$query->fetch_row()) $rows[$data[0]] = $data[1];
mysqli_free_result($query);

$rows = preg_grep('/(\b\S++).+?\1/iu', $rows);
var_dump($rows);
Pour latin il faut changer l'expression régulière
$rows = preg_grep('/(*UCP)(\b\S++).+?\1/i', $rows);
Peut être que SUBSTRING_INDEX de mySQL pourrait aider à construire un LIKE
SELECT * FROM ma_table WHERE prenom LIKE REPEAT(CONCAT(SUBSTRING_INDEX(prenom,' ',1),'%'),2)
Mais si le premier caractère est souvent un espace il trouvera pas grand chose de pertinent. Même sur les 3 premiers espaces
SELECT * FROM ma_table
WHERE prenom LIKE REPEAT(CONCAT(SUBSTRING_INDEX(prenom,' ',1),'%'), 2)
   OR prenom LIKE REPEAT(CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(prenom,' ',2),' ',-1),'%'),2)
   OR prenom LIKE REPEAT(CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(prenom,' ',3),' ',-1),'%'),2)
Et il faut espérer que les blancs comme \t \n \r ne sont pas de la partie, car seul une expression régulière pour gérer le "tout et n importe quoi" à partir de là.

Bonne chance