Requete pour remplacer une partie de chaine via Myadmin

Requete pour remplacer une partie de chaine via Myadmin - SQL/NoSQL - Programmation

Marsh Posté le 04-12-2009 à 21:35:53    

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

Reply

Marsh Posté le 04-12-2009 à 21:35:53   

Reply

Marsh Posté le 05-12-2009 à 10:29:02    

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
Reply

Marsh Posté le 07-12-2009 à 14:48:09    

Reply

Marsh Posté le 08-12-2009 à 13:45:54    

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]

Reply

Marsh Posté le 11-12-2009 à 00:18:34    

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

Reply

Marsh Posté le 14-12-2009 à 20:58:03    

hum ?

Reply

Marsh Posté le 15-12-2009 à 10:11:41    

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
Reply

Marsh Posté le 15-12-2009 à 21:04:54    

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
Reply

Marsh Posté le 15-12-2009 à 21:58:35    

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
Reply

Marsh Posté le 21-12-2009 à 14:59:48    

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
Reply

Marsh Posté le 21-12-2009 à 14:59:48   

Reply

Marsh Posté le 21-12-2009 à 21:17:13    

up up up ...

Reply

Marsh Posté le 21-12-2009 à 21:38:05    

aideinfo a écrit :

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


Reply

Marsh Posté le 23-12-2009 à 11:10:24    

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.

Reply

Marsh Posté le 23-12-2009 à 11:12:54    

à 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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed