Requete pour remplacer une partie de chaine via Myadmin - SQL/NoSQL - Programmation
Marsh Posté le 05-12-2009 à 10:29:02
La requete qui ne me convient pas :
SYNTAXE :
Code :
|
Marsh Posté le 07-12-2009 à 14:48:09
Avec des expressions régulières (REGEXP).
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
IanCurtis a écrit : Salut, |
Tu as donné la solution toi-même :
Code :
|
Avec SOURCE = "http://www.example.fr/" et DEST = "http://www.example.fr/dossier/"
Ou alors il y a un truc qui m'échappe...
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 ?
Ian
Marsh Posté le 15-12-2009 à 10:11:41
Tu te fous de la gueule de qui ?
Tu as essayé au moins ? Regardé la doc ?
testé à l'instant (pour être sûr, ça m'a pris 2 minutes ) :
table foo :
id - url
------------------------
1 - localhost/test1.html
2 - localhost/test2.html
3 - localhost:8080/test3.html
Code :
|
table foo :
id - url
------------------------
1 - localhost/test/test1.html
2 - localhost/test/test2.html
3 - localhost:8080/test3.html
Marsh Posté le 15-12-2009 à 21:04:54
Salut,
Merci pour l'accueil
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
A+
Ian
Marsh Posté le 15-12-2009 à 21:58:35
Donc t'as mal cherché dans la doc !
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 !
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
Marsh Posté le 21-12-2009 à 21:38:05
ReplyMarsh 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
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.
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
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