0

純粋に MySQL を使用して、「oldString」を「newString」で検索し、未定の数のテーブルと列から置き換えたいと考えています。information_schema でテーブル プレフィックスを検索すると、探す必要のあるすべてのテーブルが表示されます。

次の試行があります: information_schema で DB テーブルのプレフィックスをクエリする

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM information_schema.TABLES WHERE table_name LIKE  '%mysite_www%'

結果:

+-----------------+----------------------------+
| TABLE_SCHEMA    | TABLE_NAME                 |
+-----------------+----------------------------+
| myDB            | mysite_www_moredata        |
| myDB            | mysite_www_data            |
| myDB            | mysite_www_urls            |
| myDB            | mysite_www_pages           |
| myDB            | mysite_www_feedback        |
| myDB            | mysite_www_comments        |
| myDB            | mysite_www_links           |
+-----------------+----------------------------+
Query results yields about 200 tables or so.

結果を取得し、特定の文字列でフィルター処理して、新しい文字列に置き換えたいと考えています。「oldString」を「newString」に置き換えます。

各 TABLE_NAME について、「%oldString%」のような任意の列 WHERE 列を検索します。

WHERE CONCAT(table1, table2, ... tableN) LIKE 'oldString';

列の結果ごとに、「oldString」を「newString」に更新します。

UPDATE tableN SET columnN = REPLACE (columnN, '%oldString%', 'newString') WHERE URL LIKE '%oldString%';

これはストア プロシージャになるため、純粋な MySQL で行う必要があります。どんな支援やヒントも大歓迎です。

4

1 に答える 1

1

したがって、information_Schema を使用すると、テーブルと列の両方にクエリを実行して結果を取得できます。私はこのSOの答えで似たようなことをしました。

基本的に information_schema をクエリし、MySQL に SQL を構築させます。上記のリンクはあなたを動かすはずです。

アップデート:

次のクエリを使用して、すべての Update ステートメントを作成できます。

SELECT CONCAT('UPDATE ',TABLENAME, 'SET ', COLUMN_NAME,'= REPLACE (',COLUMN_NAME, '''%oldString%'', ''newString'') WHERE URL LIKE ''%oldString%''')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE  '%somecriteria%' AND COLUMN_NAME LIKE '%somecriteria%'

これらの結果の文字列を一時テーブルに挿入し、ここで説明する手法を使用して文字列を実行する行をループします

于 2013-08-23T00:55:40.800 に答える