1

phpMyAdmin を介した MySQL 置換クエリでワイルドカードを使用できないことはわかっています。しかし、私は何らかの回避策が必要です。私はアイデアに対して非常にオープンです。スキニーは次のとおりです。

画像の URL を更新する必要がある MySQL データベースに約 2,000 ページあります。ローカルのものもあれば、ホットリンクされているものもあります。それぞれが異なり、URL の長さが異なり、ページ上の画像と新しい画像はページ ID 番号ごとに一意であり、それぞれがページの異なる場所に表示されます。

私は基本的に次のことを行う必要があります。

UPDATE pages SET body = replace(body, 'src=\"%\"', 'src=\"http://newdomain/newimage.jpg\"') WHERE id="{page_number}"

しかし、'src=\"%\"'コンポーネントがジャイブしないことはわかっています。

だから私はあなたの集合的な知識の足元に落ちてsrc="%"、設定されたページ ID 番号の設定された URL を取り、それを置き換える方法を考え出します。前もって感謝します。

4

2 に答える 2

1

ページごとに画像が 1 つしかない場合、簡単な解決策は次のようになります。

UPDATE pages
SET
  body = CONCAT(
    SUBSTRING_INDEX(body, 'src="', 1),
    'src=\"http://newdomain/newimage.jpg\"',
    SUBSTRING(
      SUBSTRING_INDEX(body, 'src="', -1)
      FROM LOCATE('"', SUBSTRING_INDEX(body, 'src="', -1))+1)
    )
WHERE
  id="{page_number}" AND
  body NOT LIKE '%<img%<img%';

最初の SUBSTRING_INDEX は の左側にある本体部分をsrc="抽出し、最後の 2 つのネストされた SUBSTRING_INDEX は の最初の の右側にある本体部分を抽出"src="ます。

最後のチェックは、文字列内に画像が 1 つだけ存在することを確認する非常に汚いチェックです。状況によっては失敗する可能性がありますが、役立つ場合があります。

于 2013-04-09T16:22:19.570 に答える
0

私の提案は、次のような置換文字列を使用してテーブルを作成することです。

page_id     replace
1           src="..."

次に、このようにJOIN全体で更新できます

UPDATE pages AS p
INNER JOIN replace AS r
  ON p.page_id = r.page_id
SET p.body = REPLACE(p.body, CONCAT('src="', SUBSTRING_INDEX(SUBSTRING_INDEX(p.body, 'src="', -1), '"', 1), '"', r.replace);

これにより、フォーマットの最後の出現src="..."が同じフォーマットの新しい値に置き換えられるため、単一の src 値を持つすべてのレコードで機能します。

于 2013-04-09T15:54:05.227 に答える