3

これが私の状況です:

私の会社はクライアント用に複数のサイトをホストしており、サイトのコンテンツは MySQL データベースに保存されています。

データベース全体を調べて、コンテンツの一部を置き換える必要があるという問題があります。例えば:

http://downloads.mysever.com/siteID/someImage.jpg//downloads.mysever.com/siteID/someImage.jpgに置き換える必要があります

そのため、ダウンロード サーバーへのすべてのリンクからhttp:を削除する必要があります。

私の質問は、これを行うための最良の方法は何ですか? これを処理するために PHP スクリプトを作成する必要がありますか、それとも MySQL だけを使用してこれを達成できますか?

ありがとう

4

5 に答える 5

2

SQLステートメントを使用できます

 UPDATE tablename SET url = REPLACE(url, 'http:', '');

このブログ投稿を読む

コマンドラインを使用してこのコマンドを実行できます

mysql -uUSERNAME -p DATABASE_NAME -e "UPDATE tablename SET url = REPLACE(url, 'http:', '')";
于 2012-12-19T16:32:36.027 に答える
2

純粋なmysqlでこれを行うことができます:

update table set field = REPLACE(field, 'http:', '') where INSTR(field, 'http:') > 0;

この質問を参照してください

于 2012-12-19T16:33:02.140 に答える
0

MySQLは正規表現機能を提供します。機能はおそらくここに入るには詳細すぎるので、ここにリンクがあります:

http://dev.mysql.com/doc/refman/5.5/en/regexp.html

サンプルケースの基本的な使用例は次のとおりです。

UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field REGEXP '^http:'

ただし、この場合は、次のようにするだけで正規表現なしで実行できることに注意してください。

UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field LIKE 'http:%'

したがって、実行する置換のタイプごとに正規表現を使用する必要がない場合があります。

于 2012-12-19T16:42:37.620 に答える
0

'http:'テーブル内のすべての行の先頭の文字列 (文字型の列から)を削除するには、次のような単純な方法が機能します。

UPDATE mytable
   SET mycol = SUBSTRING(mycol,6)
 WHERE mycol LIKE 'http:%'

アップデート:

この関数を使用するREPLACEと、指定された文字列のすべての出現が文字列から置き換えられることに注意してください。指定された文字列の先頭のオカレンスだけを削除するのには適切ではない場合があります。

列の値に含まれる「http:」をすべて削除するには、次のようにします。

UPDATE mytable
   SET mycol = REPLACE( mycol , 'http:, '')
 WHERE mycol LIKE '%http:%'

MySQL は正規表現、特に特定の正規表現に一致する値を見つけるためのサポートを提供します。ただし、MySQL は正規表現を使用した「置換」をサポートしていません。

したがって、これをクエリで使用できます。

 WHERE mycol REGEXP 'http:'

の代わりに (と同等):

 WHERE mycol LIKE '%http:%'
于 2012-12-19T16:46:21.863 に答える
0

データベースを一時的にオフラインにできる場合、最も簡単な方法は次のとおりです。

  1. mysqldump を使用してデータベース全体をエクスポートします
  2. データベースダンプを更新したいエディターで検索と置換を実行します
  3. ダンプ ファイルからデータベースを再作成します。すべてが正しく行われたことを確認してから、元のデータベースを新しいバージョンに置き換えます。
于 2012-12-19T16:31:50.763 に答える