テキスト型のカスタムフィールドを数値型に変換する

Movable Typeのカスタムフィールドの機能では、カスタムフィールドの値で記事を並べ替えて出力することができます。
ただ、テキスト型のカスタムフィールドに数値を入力して、そのカスタムフィールドの値で並べ替えると、数値ではなく文字として並べ替えられるため、正しくない並び順になることがあります。
そこで、テキスト型のカスタムフィールドを数値型に変換する方法を紹介します。

1.注意事項

今回紹介する方法では、phpMyAdminを使って、データベースを直接に書き換えます。
操作を間違えたり、操作中にphpMyAdminが途中で止まったりすると、最悪の場合、Movable Typeからデータベースに正しくアクセスできなくなることがあり得ます。
作業を行う前に、データベースをバックアップし、また復元できることを確認しておいてください。
バックアップ/復元を確認せずに作業に失敗したとしても、当方では責任を負いかねますのでご容赦ください。

2.NumericCustomFieldsプラグインのインストール

Movable Typeの標準の機能では、数値型のカスタムフィールドは存在しません。
数値型のカスタムフィールドを作るには、拙作のNumericCustomFieldsプラグインをインストールします。

NumericCustomFields_1_01.zip

ダウンロードしたZipファイルを解凍すると、「plugins」のフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。

3.SQLを実行

次に、phpMyAdminで以下の3つのSQLを実行します。
なお、SQL内の記号の意味は以下の表のとおりです。

記号置き換え先
○○○カスタムフィールドを作成したブログのID
システムのカスタムフィールドの場合は「0」
□□□カスタムフィールドのベースネーム
△△△変換したい記事があるブログのID

1つ目のSQL

UPDATE mt_field SET field_type = 'ninteger'
WHERE field_blog_id = ○○○
AND field_basename = '□□□'

2つ目のSQL

UPDATE mt_entry_meta, mt_entry
SET entry_meta_vinteger_idx = entry_meta_vchar_idx
WHERE entry_id = entry_meta_entry_id
AND entry_blog_id = △△△
AND entry_meta_type = 'field.□□□'

3つ目のSQL

UPDATE mt_entry_meta, mt_entry
SET entry_meta_vchar_idx = NULL
WHERE entry_id = entry_meta_entry_id
AND entry_blog_id = △△△
AND entry_meta_type = 'field.□□□'

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください