Requete SQL sur les doublons ?trop compliqué!!!

bigs32
WRInaute impliqué
WRInaute impliqué
 
Messages: 517
Inscription: 8 Mai 2006

Requete SQL sur les doublons ?trop compliqué!!!

Message le Mar Mar 11, 2008 17:55

bonjour
dans ma base SQL , chaque enregistrement a un titre écrit en deux fois sur le meme champ
exemple :AC Digne les Bains en 2 fois ect..
voici d'autres exemples
ActivaSport ActivaSport
AC Digne les Bains AC Digne les Bains
A.S.Caluire Athlétisme A.S.Caluire Athlétisme
Annuaire Coaching Annuaire Coaching
Athlé St-Julien 74 Athlé St-Julien 74

j'aimerais en enlever le deuxième titre pour n'en garder qu'un
mais je n'arrive pas à trouver une requete SQL ou PHP pour faire cà.
J'ai essayé avec explode avec comme séparateur \t mais la règle ne marche pas pour tout

AVEZ VOUS UNE IDEE A ME PROPOSER

MERCI D AVANCE AUX PRO DU SQL


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1676
Inscription: 14 Aoû 2002

Message le Mar Mar 11, 2008 18:22

Bonjour
Pour faire une reconnaissance automatique d'expression régulière dans un script PHP, il faudrait que tu ais sur une table différente, les noms des titres que tu cherches à isoler.

Sinon, je ne vois pas coment un algorithme automatique pourrait résoudre le problème.

Ou bien éventuellement, tu pourrais transférer ta table SQL sur ton ordinateur en local, et faire le traitement de manière manuelle, avec le client mysql.

Une chose est sûre: S'il n'y a pas de moyen de faire une reconnaissance automatique d'expressions régulières, adieu l'automaticité, bonjour le processus manuel.

Eventuellement, si tu as toujours la source des données, tu pourrais refaire la table ( une autre table ), en ne sélectionnant qu'un titre à chaque fois, puis en faisant à chaque sélection, une recherche dans la première table par expression régulière, puis en affectant les autres champs de la ligne lue dans la première table.

Bien à toi.
Amicalement.

Jean-François Ortolo


lupuz
WRInaute discret
WRInaute discret
 
Messages: 213
Inscription: 15 Mar 2006

Message le Mar Mar 11, 2008 19:57

En SQL, ca me compliqué a faire.

Par contre, tu dois pouvoir facilement écrire un petit script comptant le nombre de mots dans le champ avant de remettre à jour l'enregistrement.

ex :

<?
$arrayMots = explode($contenuDeTonChamps);
for($num=0; $num <= (count($arrayMots )/2), $num++)
$nouveauContenu .= $arrayMots[$num];

?>


Marie-Aude
Modérateur
Modérateur
 
Messages: 11900
Inscription: 5 Juin 2006

Message le Mar Mar 11, 2008 20:39

L'idée serait de trouver le premier espace, et d'isoler la chaine jusqu'au premier espace.
Ensuite de rechercher cette chaine "plus loin" dans le champs, et de voir sa position.
Puis de supprimer tout ce qui vient après.

En syntaxe excel, ça donne
GAUCHE(A1;CHERCHE(GAUCHE(A1;CHERCHE(" ";A1;1)-1);A1;CHERCHE(" ";A1;1))-2)

en imaginant que le texte est dans la cellule A1 (je l'ai fait en vitesse sous excel pour vérifier que ça marche)

En moins dense :
Le texte est en A1
En B1 on détermine la position du premier espace :
CHERCHE(" ";A1;1)
En C1 on extrait la chaine du premier caractère jusqu'à avant le premier espace :
GAUCHE(A1;B1-1)
En D1 on trouve la deuxième occurrence de la chaine extraite : CHERCHE(C1;A1;B1)
En résultat on prend à gauche de la position de cette deuxième occurrence :
GAUCHE(A1;D1-2)

Je te laisse transformer avec les fonctions php


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Mar Mar 11, 2008 21:33

si la règle est bien respecté normalement ton champs fait 2 fois la taille + 1 (espace)

Code: Tout sélectionner
update `table` set `champ` = substr( `champ`, 1, strlen( `champ` ) / 2 );


fais une sauvegarde avant quand même ;-)

bigs32
WRInaute impliqué
WRInaute impliqué
 
Messages: 517
Inscription: 8 Mai 2006

Message le Mer Mar 12, 2008 1:32

merci , je vais essayer de faire un test


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 0 invités