早速SQLを考えていくこととしよう。まずは「ブログ一覧」。これは簡単かと思ったが、意外と面倒くさかった。
select blog_name, blog_site_url , author_name
from mt_blog B, mt_author A, mt_permission P
where B.blog_id=P.permission_blog_id and P.permission_author_id=A.author_id
and (author_id != 1 or (author_id=1 and blog_id=1));
MTの場合、一つのWebログに対して複数の投稿者を登録できるようにするため、「ユーザ一覧」「ブログ一覧」「ユーザとブログの権限関係」それぞれが別テーブルになっている。そこで一覧として取り出すには、まずこれら3つを結合してからでなくてはいけない。さらに、これは本来望ましくない状態だが、現在はユーザID1のユーザが全体の管理者を兼ねており、権限テーブルにおいて全てのブログに出現する。これを避けるための条件が最後の行である(単にauthor_id != 1では自身のブログが出力されなくなってしまうため、こういう形になっている)。
次に最新のエントリーN(ここでは15)件。
select entry_title, blog_name, date_format(entry_created_on, '%Y/%c/%e, %T') as created_on,
concat(blog_archive_url ,lpad(entry_id, 6, '0'), '.', blog_file_extension) as entry_url
from mt_blog B, mt_entry E
where B.blog_id=E.entry_blog_id and entry_status=2
order by entry_created_on desc limit 15;
エントリーへのURL生成部分がかなり苦しい。上記では日ごとのアーカイブ生成を前提としているわけだが、これは今後変わらない保証はない。「最新」エントリーなんだから、素直にトップのURL+アンカーとするべきか…要検討といったところか。
「コメントが付いたエントリー一覧」については、トラックバックとの絡みもあって色々とややこしい。だからそれはもう少し後で検討することにして、早々に実装作業に入ろうかな。他スタッフを急かす意味でも(笑。
投稿者 StaffT : May 24, 2004 06:52 PM