0

巨大なインターネット サービスをドメイン .de からドメイン .com にリダイレクトしました。これはディスカッション ボード (vBulletin) です。現時点では、「domainame.de」などのすべてのフレーズを「domainname.com」に変更する必要があります。

  • 120 以上のテーブル (投稿、スレッド)
  • 多くの MySQL フィールド

誰でもこのようなことをする方法を提案していますか? 文字列「domainname.de」を「domainname.com」に置き換える必要があります-どこでも。

4

2 に答える 2

2

あなたがやりたいことは、いくつかの誤検知に遭遇し、意図せずに物事を変える可能性があるため、危険に聞こえます. 古いドメインが「acme.de」で新しいドメインが「acme.com」で、ランダムな訪問者が次のように投稿したとします (これは単純化しすぎた例です)。

Acme と一緒に仕事をするのは楽しいです。気分次第です。

これを次のように変換するのは非常に簡単です。

私は自分の気分で Acme.compending を使って作業することを楽しんでいます。

したがって、私の提案は、優先順に次のとおりです。

  1. DB をまったく更新しないでください。.de トラフィックを .com トラフィックにリダイレクトするように Web サーバーを構成するだけです。こうすれば間違いを犯す可能性は低くなります。

  2. ディスカッション ボードを更新する必要がある場合は、データベースではなく、表示ロジックで更新してください。そうすれば、取り返しのつかない間違いを犯す可能性はなくなります。

  3. perl、またはお気に入りのテキスト処理言語である言語でスクリプトを記述します。これにより、すべてのテーブル/フィールドで正規表現の置換が行われます。次の戦略を提案します。

    を。するSELECT id,<field name> FROM <table> WHERE <field name> LIKE '%domain.de%'

    b. 出力を CSV または解析しやすいその他の形式で保存します。

    c. Regex スクリプトを実行して、domain.dedomain.comに変更します。

    d. 出力を確認します。

    e. UPDATE <table> SET <field>=? WHERE id=?スクリプトの出力で を実行します。

    最初は小さなチャンクで行い (一度に数十または数百の投稿)、変更をデータベースにコミットする前に結果を視覚的にチェックして、間違いを犯していないことを確認します。

于 2013-01-02T12:04:46.860 に答える
0

これがあなたに当てはまるかどうかはわかりませんが、これを見てください

次のクエリは、テーブルのリスト (120 テーブル) を提供します。

   SELECT DISTINCT table_name
   FROM
   (
     SELECT *
     FROM information_schema.`COLUMNS` C
   ) t1
   WHERE TABLE_SCHEMA='schema_name'

次に、各テーブルに対して UPDATE クエリを使用できます。CURSORSを使用してこれを実現できます

私はカーソルが苦手ですが、この状況で役立つと思います

于 2013-01-02T12:53:22.720 に答える