カテゴリー
technology

DBIC で count したもので order by する方法

Hatena::Diary::Neko::kak 500 Internal Server Error – countしたものにorder by
http://en.yummy.stripper.jp/?eid=448071
DBICではたぶん発行するSQLのカラムに別名をつけられないみたいなので
スカラーリファレンスでしかたないんじゃないすかね。

同じことで悩んだ時期もありましたが、いろいろ試してみた結果 order by 句に count(hoge) そのものを指定できることがわかりました。(少なくとも MySQL と SQLite で動作確認済み)

$rs = $schema->search(
{},
{ select   => [ 'link', { count => 'entry' } ],
group_by => [qw/ link /],
order_by => 'count(link) DESC',
page     => $page,
rows     => $rows_per_page }
);

そんなの知るわけないじゃんと思ってたらやはり SQL92 の仕様的には order by 句には sort_key が、そして sort_key は column_name か unsigned_integer となるので order by count(hoge) は問題みたいですが、SQL99 以降ではなんやかんやで order by count(hoge) でも問題ないのですね。へぇー。