Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser Regexp dans les commandes MySQL Replace ?

Comme d'autres l'ont déjà mentionné, vous ne pouvez pas le faire dans MySQL. Cependant, cela semble être une opération unique que vous devez faire, alors je vous ai écrit un petit script php rapide et sale pour faire le travail. Il suppose que votre table node_revisions a une colonne de clé primaire appelée 'id'. Si ce n'est pas le cas, modifiez-le de manière appropriée. N'oubliez pas non plus de modifier l'hôte de la base de données, le nom d'utilisateur, le mot de passe et le nom de la base de données en haut du script pour qu'ils correspondent à votre configuration.


<?php
$host = '127.0.0.1';
$username = 'root';
$password = 'password';
$database = 'test';

$conn = mysql_connect($host, $username, $password);

if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}

if (!mysql_select_db($database)) {
    echo "Unable to select " . $database . ": " . mysql_error();
    exit;
}

$sql = "SELECT * FROM node_revisions";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

while ($row = mysql_fetch_assoc($result)) {
    $id = $row['id'];
    $body = $row['body'];
    $teaser = $row['teaser'];
    $body = preg_replace('/http:\/\/.*?\.pdf/', '/migration-update', $body);
    $teaser = preg_replace('/http:\/\/.*?\.pdf/', '/migration-update', $teaser);
    $sql = "UPDATE node_revisions set body='" . mysql_real_escape_string($body) . "', teaser='" . mysql_real_escape_string($teaser) . "' where id=" . $id;
    mysql_query($sql);
}

mysql_free_result($result);
mysql_close($conn);
?>

Notez également que j'ai utilisé un modificateur non gourmand sur les expressions régulières afin que si vous avez plusieurs URL pdf dans un champ body ou teaser, vous ne perdrez pas tout entre eux.