2 votes

Remplacer du texte sur MySQL - Caractères génériques pour remplacer certaines parties de variables ?

J'essaie d'appliquer un remplacement de texte sur ma base de données MySQL WordPress. Je dois supprimer une partie du code html des images actuelles, mais cette partie du texte est variable, alors qu'il y a une partie qui ne change jamais.

Y a-t-il un joker que je peux utiliser sur un remplacement de MySQL ?

Exemple : Je voudrais remplacer ceci :

<a target="_self" href="actualidad/tecnologia/4455-windows-7-surpasses.html"><img src=”http://www.example.com/files/HIDDEN_264_23662_FOTO_win01.jpg" width="215" height="156" /></a>

a

<img src=”http://www.example.com/files/HIDDEN_264_23662_FOTO_win01.jpg" width="215" height="156" />

Et supprimer la partie href, donc je pensais à un remplacement similaire à celui-ci :

update wp_posts set post_content = REPLACE 
(post_content, '<a target="_self" href=*<img','<img');

Existe-t-il un "*" (ou un regexp) qui prend tout ce qui se trouve entre le "href" et le '

3voto

Matthieu Riegler Points 20160

En général, je triche et vide la base de données en texte, puis j'utilise sed (ou Notepad++ si la base de données est assez petite). Sinon, il est plus facile de le faire par programme en utilisant Perl ou Python.

Faire ce genre de manipulation avec du SQL pur est douloureux. Si vous le faites, je vous recommande vivement d'éviter REPLACE. Ce n'est pas ce à quoi il est normalement utilisé. Si vous avez l'intention d'effectuer un changement en masse sur des lignes existantes, utilisez UPDATE par lui-même à la place.

1voto

3molo Points 4320

% ne fonctionne pas dans ce scénario ?

1voto

Adam Points 11

Malheureusement, il n'existe pas d'autre API pour les expressions régulières.

Des personnes se sont attaquées à ce problème à l'époque de MySQL 4.0, mais ces efforts n'ont pas été intégrés dans les binaires courants de MySQL.

http://www.php-groupies.de/blogs/archives/17-Regular-Expression-Functions-for-MySQL.html

http://forge.mysql.com/worklog/task.php?id=353

Votre déclaration UPDATE devrait suffire.

update wp_posts set post_content = REPLACE (post_content, '<a target="_self" href=*<img','<img');

Même si une telle API existait, il n'y a aucun sens à l'appliquer mieux que vous ne l'avez déjà fait. Votre UPDATE effectue un balayage complet de la table. L'application d'un WHERE à l'aide de REGEXP entraînerait toujours un balayage complet de la table. Votre UPDATE original est le meilleur pour le scénario donné.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X