Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwende ich Regexp in MySQL-Ersetzungsbefehlen?

Wie andere bereits erwähnt haben, können Sie dies in MySQL nicht tun. Dies scheint jedoch eine einmalige Operation zu sein, die Sie durchführen müssen, also habe ich Ihnen ein schnelles und schmutziges kleines PHP-Skript geschrieben, um die Arbeit zu erledigen. Es wird davon ausgegangen, dass Ihre node_revisions-Tabelle eine Primärschlüsselspalte namens „id“ hat. Wenn nicht, entsprechend bearbeiten. Vergessen Sie auch nicht, den Datenbankhost, den Benutzernamen, das Passwort und den Datenbanknamen oben im Skript an Ihre Konfiguration anzupassen.


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

Beachten Sie auch, dass ich einen nicht gierigen Modifikator für die regulären Ausdrücke verwendet habe, damit Sie nicht alles dazwischen verlieren, wenn Sie mehrere PDF-URLs in einem Body- oder Teaser-Feld haben.