sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo usar Regexp en los comandos de reemplazo de MySQL?

Como ya han mencionado otros, no puedes hacer esto en MySQL. Sin embargo, esto parece ser una operación única que debe hacer, así que le escribí un pequeño y rápido script php para hacer el trabajo. Asume que su tabla node_revisions tiene una columna de clave principal llamada 'id'. Si no, edite apropiadamente. Además, no olvide cambiar el host de la base de datos, el nombre de usuario, la contraseña y el nombre de la base de datos en la parte superior del script para que coincida con su configuración.


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

Tenga en cuenta también que utilicé un modificador no codicioso en las expresiones regulares para que, si tiene varias URL de pdf en un cuerpo o en un campo teaser, no pierda todo lo que hay entre ellas.