Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar o Regexp nos comandos de substituição do MySQL?


Como outros já mencionaram, você não pode fazer isso no MySQL. No entanto, isso parece ser uma operação única que você precisa fazer, então eu escrevi um pequeno script php rápido e sujo para fazer o trabalho. Ele assume que sua tabela node_revisions tem uma coluna de chave primária chamada 'id'. Se não, edite adequadamente. Além disso, não se esqueça de alterar o host do banco de dados, o nome de usuário, a senha e o nome do banco de dados na parte superior do script para corresponder à sua configuração.

<?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);
?>

Observe também que usei um modificador não ganancioso nas expressões regulares para que, se você tiver vários URLs de pdf em um corpo ou campo de teaser, não perderá tudo entre eles.