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命令を用いて上書きすること。