は私の線に沿って、ファイルのパスが含まれているテーブルの列を持っているMySQL正規表現のスタイルが置き換えられますか?</p> <p>/here/here2/something.jpg</p> <p>が、私はそれをマッピングするためにすべての行を変更する必要があります:
/here3/something.jpg
これを行う簡単な方法はありますか?ありがとう!
は私の線に沿って、ファイルのパスが含まれているテーブルの列を持っているMySQL正規表現のスタイルが置き換えられますか?</p> <p>/here/here2/something.jpg</p> <p>が、私はそれをマッピングするためにすべての行を変更する必要があります:
/here3/something.jpg
これを行う簡単な方法はありますか?ありがとう!
これには正規表現は必要ありません。単純な文字列関数はそのトリックを行うことができます。あなたはこのようにクエリを使用することができます:ここで
update test set path=concat('/here3/',
substring(path, length('/here/here2/') + 1))
where path like '/here/here2/%';
は、それが機能することを証明するために少しテストケースである:
mysql> create table test (path varchar(64));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into test (path) values
-> ('/here/here2/something.jpg'),
-> ('/here/here2/something-else.jpg'),
-> ('/here/here2/yet-another-something.jpg');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from test;
+---------------------------------------+
| path |
+---------------------------------------+
| /here/here2/something.jpg |
| /here/here2/something-else.jpg |
| /here/here2/yet-another-something.jpg |
+---------------------------------------+
3 rows in set (0.00 sec)
mysql> update test set path=concat('/here3/',
-> substring(path, length('/here/here2/') + 1))
-> where path like '/here/here2/%';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select * from test;
+----------------------------------+
| path |
+----------------------------------+
| /here3/something.jpg |
| /here3/something-else.jpg |
| /here3/yet-another-something.jpg |
+----------------------------------+
3 rows in set (0.00 sec)
まず、PHPの使用に精通していますか?データベースからすべてのエントリを取得し、preg_replace()を使用してエントリを変更するスクリプトを作成できます。次に、mysqlを使ってデータベースを更新することができます。