KOFの会場にACアダプタ忘れて来て凹む。
公開日 : 2007-11-11 06:04:08
KOFで話して来た...のはいいんだけど帰ってみるとMacBookのACアダプタが無いことに気づく。事務局に確認するにしてもとたんに月曜日困るからなぁ...凹む。
ってかバレーの選手たちが頑張ってるのに凹んでる場合じゃないですぜ、旦那(笑)。
思い当たったのが、カテゴリでの絞り込みをした際の個別エントリーページの表示。この時、前のエントリーと次のエントリーへリンクを張るわけですが、ここのロジックがかなり地道な作業を行っており、一つエントリーを拾ってきてカテゴリを照会し、異なれば次のエントリーを拾って、ということをやっているんですね。で、コレで何がどうなるのかというと、膨大なエントリーがあるブログで、例えばとあるカテゴリーに1件しかエントリーがない場合、あるはずのない同一カテゴリーに所属するエントリーを求めて、端から端までなめる訳です。
もしもブログ内の各エントリーの authored_on (created_on) がユニークだと決めうちしちゃえるなら以下のような感じで。決めうちできないなら authored_on から数字を(足す|引く)してから数件取得すればいいと思います。でも僕だったらカテゴリーのエントリーをリストアップした時に前後のエントリーIDを引数にくっつけちゃいますけどね。...&next=131&prev=98 とか。
my $next = neighbor_entry($entry, $category->id, 'next');
my $prev = neighbor_entry($entry, $category->id, 'prev');
sub neighbor_entry {
my ($entry, $category_id, $prev_or_next) = @_;
my $direction = 'ascend';
if ($prev_or_next eq 'prev') {
$direction = 'descend';
}
return MT::Entry->load({ blog_id => $entry->blog_id,
status => 2 },
{ sort => "authored_on",
start_val => $entry->authored_on,
direction => $direction,
limit => 1,
'join' => [ 'MT::Placement', 'entry_id',
{ blog_id => $entry->blog_id,
category_id => $category_id },
{ unique => 1 } ],
} );
}