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

  • Auteur de la discussion Auteur de la discussion bigs32
  • Date de début Date de début
WRInaute occasionnel
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
 
WRInaute accro
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
 
WRInaute discret
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];

?>
 
WRInaute accro
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
 
WRInaute impliqué
si la règle est bien respecté normalement ton champs fait 2 fois la taille + 1 (espace)

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

fais une sauvegarde avant quand même ;-)
 
Discussions similaires
Haut