05 May 2009

MovableTypeのカテゴリ編集をMySQLをで一気に行う

MovableTypeの記事のカテゴリ再編成、特に一括編集画面の無いサブカテゴリの再編成をGUI上から行うと、記事ごとに編集・保存・再構築のプロセスを経ることになり、とんでもない時間がかかる。

で、MovableTypeのデータがMySQLデータベース上に全て格納されていることを利用して、コマンドラインから記事へカテゴリ付けを行う。

記事は、pfix_entry テーブルに格納されている。ここには「記事名」「本文」「編集日時」などが格納されているが、カテゴリに関するものは格納されていない。カテゴリは、pfix_placement テーブルに格納されている。

pfix_placement テーブルの構造例
CREATE TABLE `pfix_placement` ( `placement_id` int(11) NOT NULL auto_increment, `placement_blog_id` int(11) NOT NULL default '0', `placement_category_id` int(11) NOT NULL default '0', `placement_entry_id` int(11) NOT NULL default '0', `placement_is_primary` tinyint(4) NOT NULL default '0', PRIMARY KEY (`placement_id`), KEY `pfix_placement_category_id` (`placement_category_id`), KEY `pfix_placement_blog_id` (`placement_blog_id`), KEY `pfix_placement_is_primary` (`placement_is_primary`), KEY `pfix_placement_entry_id` (`placement_entry_id`) ) TYPE=MyISAM AUTO_INCREMENT=604 ;

MovableTypeの編集画面を開いて、「エントリー一覧表示」で記事名の上にカーソルを持っていくと記事番号が「id=nnn」という感じで表示される。この記事番号はentry_idにあたる。 また、「カテゴリ作成」でカテゴリ名の上にカーソルを持っていっても同様に「id=nnn」という感じでカテゴリ番号も表示される。

つまり、これらを用いてカテゴリ付けを行えばよいわけだ。

例として、記事番号 500の記事に対して、サブカテゴリ 15を付ける操作は、MySQLのコマンドで次のようになる。

mysql> INSERT INTO `mt_placement` (`placement_blog_id`, mysql> `placement_category_id`, `placement_entry_id`, mysql> `placement_is_primary`) values (2, 15, 500, 0);

なお、ブログ番号(placement_blog_id)は既存のものにあわせること。サブカテゴリの追加は、「placement_is_primary = 0」とすればよい。主カテゴリは「placement_is_primary = 1」だが、既に主カテゴリが存在している場合は UPDATE命令を用いて上書きすること。