このトピックってなぁ、「データベースを少し知っている人は超簡単だと思う」、「データベースをとても知っている人は「難しいことを知っている」」有名なネタなのね。
聞きかじり程度、もしくは「たまにしかデータベース使わない」あるいは「一種類の DBMS だけ使ったことがある」くらいだと、「難しいわけないじゃん」と思うんだねぇ。ところがこれ、DBMS ごとに全部やり方が違う。あとね、PostgreSQL なんかがそうなんだけど、UPDATE 対象のレコードに対して SELECT 結果が複数件ヒットした場合にハマることが多かったりとか。このことはSQLクックブック ―データベースエキスパートのための実践レシピ集に詳しく書いてある。
MySQLにご用事があって、SQLクックブック ―データベースエキスパートのための実践レシピ集が今手許になかったもんだから、インターネトた。さんくす。
てふわけで。
1 SELECT
2 ID
3 , REPLACE(post_content, '[code language=', '[code lang=') AS post_content
4 FROM wp1_posts
5 WHERE post_content LIKE '%[code language=%'
1 SELECT
2 ID, post_content
3 FROM
4 (
5 SELECT
6 ID
7 , REPLACE(post_content, '[code language=', '[code lang=') AS post_content
8 FROM wp1_posts
9 WHERE post_content LIKE '%[code language=%'
10 ) b
1 UPDATE
2 wp1_posts a,
3 (
4 SELECT
5 ID
6 , REPLACE(post_content, '[code language=', '[code lang=') AS post_content
7 FROM wp1_posts
8 WHERE post_content LIKE '%[code language=%'
9 ) b
10
11 SET
12 a.post_content = b.post_content
13 WHERE a.ID = b.ID
なおこのネタ、実は「Pygmentize」からの一連の流れだったりします。つまりね、「プラグインを自力で書き換えて」るわけなんだけど、これまではオリジナルのプラグインのショートコードと同じ仕様にしてて、でもどうせだからと全部「俺様プラグイン仕様」に、記事を全置換したくてな。つまり上の SQL は、WordPress のデータベース相手です。