Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3256 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete pour remplacer une partie de chaine via Myadmin

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete pour remplacer une partie de chaine via Myadmin

n°1947491
IanCurtis
Ian, member of Bitonio's way
Posté le 04-12-2009 à 21:35:53  profilanswer
 

Salut,
 
J'ai une base de données qui comprend 10 000 enregistrements : annuaire php/mysql
 
J'ai bien une requete replace pour remplacer une chaine de caractères par une autre Ex :  "chien" par "chat", mais je n'arrive pas à en faire une qui ne remplace qu'une partie d'une chaine par une autre .
 
Exemple : remplacer dans un champ URL toutes les chaines http://www.example.fr/blaba.com par http://www.example.fr/dossier/blaba.com
 
.... sans modifier ce qui vient apres http://www.example.fr/ ...
 
Suis-je clair clair ? C'est une requete que je compte utiliser directos dans phpmyadmin
 
Si vous pouviez m'aider ...
 
A+
Ian

mood
Publicité
Posté le 04-12-2009 à 21:35:53  profilanswer
 

n°1947543
IanCurtis
Ian, member of Bitonio's way
Posté le 05-12-2009 à 10:29:02  profilanswer
 

La requete qui ne me convient pas  :  
SYNTAXE :

Code :
  1. update `TABLE` set CHAMP=REPLACE(CHAMP,'SOURCE','DEST') where CHAMP like '%SOURCE%'


Message édité par IanCurtis le 05-12-2009 à 10:29:17
n°1947930
aideinfo
Posté le 07-12-2009 à 14:48:09  profilanswer
 
n°1948351
macgawel
Posté le 08-12-2009 à 13:45:54  profilanswer
 

aideinfo a écrit :

Avec des expressions régulières (REGEXP).


Pas sûr que phpmyadmin accepte les REGEXP  :o  

IanCurtis a écrit :

Salut,
 
J'ai une base de données qui comprend 10 000 enregistrements : annuaire php/mysql
 
J'ai bien une requete replace pour remplacer une chaine de caractères par une autre Ex :  "chien" par "chat", mais je n'arrive pas à en faire une qui ne remplace qu'une partie d'une chaine par une autre .
 
Exemple : remplacer dans un champ URL toutes les chaines http://www.example.fr/blaba.com par http://www.example.fr/dossier/blaba.com


Tu as donné la solution toi-même :

Code :
  1. update `TABLE` set CHAMP=REPLACE(CHAMP,'SOURCE','DEST') where CHAMP like '%SOURCE%'


Avec SOURCE = "http://www.example.fr/" et DEST = "http://www.example.fr/dossier/"
 
Ou alors il y a un truc qui m'échappe... [:transparency]

n°1949269
IanCurtis
Ian, member of Bitonio's way
Posté le 11-12-2009 à 00:18:34  profilanswer
 

nan ça ne marche pas : si la source est "http://www.example.fr/", ça ne prend pas en compte les enregustrements qui comprennent comme url "http://www.example.fr/sousdos/" par exemple : il faut un moyen pour remplacer une partie de chaine de caractères, et non une chaine entiere ...
 
Suis je clair ? :ange:  
 
Ian

n°1950292
IanCurtis
Ian, member of Bitonio's way
Posté le 14-12-2009 à 20:58:03  profilanswer
 

hum ?

n°1950418
kao98
...
Posté le 15-12-2009 à 10:11:41  profilanswer
 

Tu te fous de la gueule de qui ? :heink:
Tu as essayé au moins ? Regardé la doc ?
 
testé à l'instant (pour être sûr, ça m'a pris 2 minutes :o) :
 
table foo :
id - url
------------------------
1 - localhost/test1.html
2 - localhost/test2.html
3 - localhost:8080/test3.html
 

Code :
  1. UPDATE foo SET url=REPLACE(url, 'localhost', 'localhost/test') WHERE url LIKE 'localhost/%'


 
table foo :
id - url
------------------------
1 - localhost/test/test1.html
2 - localhost/test/test2.html
3 - localhost:8080/test3.html


Message édité par kao98 le 15-12-2009 à 10:15:58

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1950639
IanCurtis
Ian, member of Bitonio's way
Posté le 15-12-2009 à 21:04:54  profilanswer
 

Salut,
 
Merci pour l'accueil  :o  
 
Bien sûr que j'avais testé et regardé la doc, sinon je ne serais pas venu ici ...
Ce que je ne saisis pas c'est localhost/% au lieu  de %localhost/%
 
ça veut dire que l'on indique la partie de la chaine à changer ?
 
... et que pour remplacer localhost par test/localhost par exemple, il aurait suffi de mettre %/localhost ??
hum :whistle:  
A+
Ian


Message édité par IanCurtis le 15-12-2009 à 21:07:05
n°1950649
kao98
...
Posté le 15-12-2009 à 21:58:35  profilanswer
 

Donc t'as mal cherché dans la doc ! :o
 
D'une part, le "REPLACE()" se suffit plus ou moins à lui même (le WHERE n'est pas forcément obligatoire). En effet, remplacer "toto" par "tata" ne remplacera "toto" que dans les enregistrements contenant "toto" !
Mais bon, d'autre part, il est quand même bon de spécifier le where, ne serait-ce que pour le cas, dans mon exemple, de l'enregistrement N° 3.  
Le fameux "%" donc : tu découvres SQL on dirait ! Le "%", c'est le caractère générique ! Comme le caractère "*" quoi ! Dans mon where, je lui dis donc d'effectuer l'UPDATE sur les enregistrements dont l'url commence par "localhost/" suivi de n'importe quelle chaine de caractère.
 
Fait donc des tests sur tes données avec un SELECT !
SELECT truc FROM muche WHERE truc LIKE 'truc%'
Et RTFM ! C'est du SQL de base ça ! :o


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1952095
IanCurtis
Ian, member of Bitonio's way
Posté le 21-12-2009 à 14:59:48  profilanswer
 

Salut,
 
Merci pour ta patience, j'ai pigé le tout et ça fonctionne super :-)
 
Plus difficile : je veux remplacer toutes les urls qui comporent un nombre defini de sous dossier (3 par exemple), par une url qui n'en comporte qu'un (par exemple). Sachant qu'il fait traiter des url qui renvoient chacune à des fichier differents ...
 
Exemple remplacer :
 
http:\\www.test\dos1\sousdos1\sousousdos1\file1.rtf  
 
par http:\\www.aurtre_url\dos2\file1.rtf
 
 
J'ai regardé la doc sql, avec le joker % et le caracère à soulignement, ainsi que les crochets, et j'en viens à me demander si c'est possible.
 
Ian


Message édité par IanCurtis le 21-12-2009 à 15:06:59
mood
Publicité
Posté le 21-12-2009 à 14:59:48  profilanswer
 

n°1952223
IanCurtis
Ian, member of Bitonio's way
Posté le 21-12-2009 à 21:17:13  profilanswer
 

up up up ...

n°1952231
stealth35
Posté le 21-12-2009 à 21:38:05  profilanswer
 

aideinfo a écrit :

Avec des expressions régulières (REGEXP).


n°1952714
MagicBuzz
Posté le 23-12-2009 à 11:10:24  profilanswer
 

Honnêtement, je vois pas pourquoi tu aurais besoin des expressions régulières pour ça, ni te de compliquer la vie à ce point :heink:
 
Première question :
 
update table set champ = replace('http://www.example.fr/', 'http://www.example.fr/dossier/') where champ not like 'http://www.example.fr/dossier/%'
 
(afin de ne pas modifier les enregistrement qui auraient déjà le bon dossier...)
 
seconde question :
 
c'est un bordel sans nom ce que tu demandes : tu veux quoi au juste ? poste un vrai exemple.

n°1952717
MagicBuzz
Posté le 23-12-2009 à 11:12:54  profilanswer
 

à mon avis, une série de :
 
update table set champ = replace('http:\\www.test\dos1\sousdos1\sousousdos1\', 'par http:\\www.aurtre_url\dos2\') where champ like 'http:\\www.test\dos1\sousdos1\sousousdos1\%' and left(champ, len(champ) - len ('http:\\www.test\dos1\sousdos1\sousousdos1\' + 1)) not like '%\%'
 
devrait suffir


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete pour remplacer une partie de chaine via Myadmin

 

Sujets relatifs
L'heure est grave [Comparaison de chaîne de caractères]requete
[Résolu] remplacer un mot réccurantafficher les combinaisons de chaine de caractères
mettre le resultat d'une requete dans une variableAfficher un certain nombre de caractères dans une chaîne (S.O.S)
[ADO] Executer requête Update sous VBProblème requete SQL : double et différent
Requête Where SQLProbleme requete
Plus de sujets relatifs à : Requete pour remplacer une partie de chaine via Myadmin


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR