WordPressのカスタムフィールドに登録してある数字を一括置換する方法

Last modified date

MySQLからカスタムフィールドの値を一括置換する

前回はMySQLからWordPressの記事本文を一括置換する方法を紹介したが、

今回は記事本文ではなく、すでにカスタムフィールドに登録してある値をデータベースから直接一括変換するぞ。

カスタムフィールドに登録してある消費税込みの金額を一括置換する場合

今回はカスタムフィールドに登録してある消費税込みの金額を、税率が変わったときに一括変換することを想定する。(まぁ理想は税率は別で登録しておいて、計算したものを表示するようにすればいいのだが、世の中そういうプログラムばかりではないからな。フハハハ!!)

UPDATE文とTRUNCATE()関数を使用して変換する

基本的には該当するメタデータを指定して、UPDATE文で更新するという作業になる。

UPDATE文とは

UPDATE  テーブル名
SET    列名 = 値 
WHERE 更新する行を特定する条件;

テーブルを選択し、列名のイコールの後に、アップデートしたい値を入れ、テーブルのどの行で行うかの条件を指定する。

TRUNCATE()の基本的な使い方

truncate ( 切り捨て対象の数字, 小数点以下の桁数 )
truncate( 1598.1213, 1 );
//結果  1598.1
truncate( 1598.1213, 2 );
//結果  1598.12
truncate( 1598.1213, 0 );
//結果  1598

truncate()関数は小数点以下の桁数を1に指定すると、1桁、2を指定すると2桁、0を指定すると整数だけ返ってくる。

税率計算で生じた端数をこの関数を使用して切り捨てる。今回はtruncate()関数をそのまま使わずに計算してから、使用する。

//消費税が8%から10%に変わる場合
TRUNCATE(今の金額 /1.08 * 1.1 , 0)

上のクエリ文は、今の金額はすでに税率を掛けたものなので、一旦税抜に戻してから、新しい税率を掛けて、小数点以下を切り捨てる。という文になる。

この2つの文を組み合わせて、カスタムフィールドの値を一括変換する。

カスタムフィールドの値はwp_postmetaのmeta_valueに入っているので、後はどのmeta_keyなのかを指定すればOKだ。

wp_postmetaのデータを書き換える

UPDATE wp_postmeta
SET meta_value = TRUNCATE(meta_value /1.08 * 1.1 , 0) -- 小数点以下切捨
WHERE meta_key = 'product_price';

このクエリ文でmeta_keyが'product_price'の値はすべて、1.1倍の数字に変わっているはずである。

ちなみに該当の記事のmeta_keyのみ変換したい場合は

UPDATE wp_postmeta
SET meta_value = TRUNCATE(meta_value /1.08 * 1.1 , 0) -- 小数点以下切捨
WHERE
post_id = ANY(
SELECT ID FROM wp_posts
WHERE
post_author= 1
)
And 
meta_key = 'product_price'
;

このように別のテーブル(wp_posts)の「post_author」のIDが「1」になっている記事IDと同じpost_idを持つ行の、meta_key が 'product_price'のmeta_valueを書き換える。

という文もできる。日本語だと難しいな。

データベースを操作する際の注意

データベースを操作する際には必ずバックアップを取ってから行うのだ!

一度操作して消えてしまった内容はザオリクしても生き返ることは無い。

必ずバックアップを取るのだぞ!

魔王様

コメントを残す

メールアドレスが公開されることはありません。

Post comment