MovableType で 20個くらいのブログを公開されているお客さんがいらっしゃる。
んで、公開しているブログの一覧ページがあって、それぞれのブログ名の横に、そのブログの最新公開日をわしが作ったプログラムでセットしている。
・・・がバグってた。(^^;
引っ張ってきている日付が公開日ではなく作成日だったのだ。
SELECT A.entry_blog_id AS blog_id,
MAX(A.entry_created_on) AS release_date
FROM mt_entry A
JOIN
(SELECT entry_blog_id
FROM mt_entry
GROUP BY entry_blog_id
ORDER BY entry_blog_id) B
ON A.entry_blog_id = B.entry_blog_id
GROUP BY A.entry_blog_id;
という SQL で、それぞれのブログの entry_created_on の一番大きいヤツ(つまり最新の entry_created_on)を取ってきていたんだが、entry_created_on って作成日じゃん。'entry_create' だからな。
だから、2月14日にエントリーを作成すると、作成日には 2009-02-14 がセットされる。
そして、このエントリーを 2月18日に公開すると、公開日には 2009-02-18 がセットされるが、作成日は当然 2009-02-14 のままだ。
なので、2月18日に公開したにも関わらず、ブログの横の最新公開日は 2月14日のままになっていたのだ。
実は、このお客さんは以前は MovableType 3.x を使っており、このプログラムはその頃から使っていたのだがあまり問題にはならなかった。最近、4.x にバージョンアップしてから問題になったのだ。
どうも、(聞いた話なので間違いがあるかもしれないが)3.x の時は、エントリーを公開すると、作成日も公開した日にちに更新されていたようなのだ。
つまり、上の例で言うと、2月18日に公開したら、作成日にも 2009-02-18 がセットされるということだ。だから、作成日を引っ張ってきてても、公開したあとにはちゃんと最新公開日が更新されていたわけである。
ただ、この場合も、作成日を引っ張っていると、まだ公開していないうちから最新公開日が更新されてしまうので、どっちみち問題があるのだ。
公開したのに最新公開日が更新されない場合よりも目立たないので、3.x 時代は誰も日付がおかしいことに気づかなかったのだろう。
mt_entry テーブルで公開日がセットされているのは entry_authored_on だそうだ。
ということで、上記の SQL 文の
MAX(A.entry_created_on) AS release_date
を、
MAX(A.entry_authored_on) AS release_date
に変更してOK。
実際の公開日が最新公開日にセットされるようになった。