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) でも問題ないのですね。へぇー。
以下、SQL99 での sort_key 定義から count(hoge) まで。
<sort key> ::= <value expression> <value expression> ::= <numeric value expression> | <string value expression> | <datetime value expression> | <interval value expression> | <boolean value expression> | <user-defined type value expression> | <row value expression> | <reference value expression> | <collection value expression> <collection value expression> ::= <value expression primary> <value expression primary> ::= <parenthesized value expression> | <nonparenthesized value expression primary> <nonparenthesized value expression primary> ::= <unsigned value specification> | <column reference> | <set function specification> | <scalar subquery> | <case expression> | <cast specification> | <subtype treatment> | <attribute or method reference> | <reference resolution> | <collection value constructor> | <routine invocation> | <field reference> | <element reference> | <method invocation> | <static method invocation> | <new specification> <set function specification> ::= COUNT <left paren> <asterisk> <right paren> | <general set function> | <grouping operation> <general set function> ::= <set function type> <left paren> [ <set quantifier> ] <value expression> <right paren> <set function type> ::= <computational operation> <computational operation> ::= AVG | MAX | MIN | SUM | EVERY | ANY | SOME | COUNT
■BNF Grammar for ISO/IEC 9075:1992 – Database Language SQL (SQL-92)
■BNF Grammar for ISO/IEC 9075:1999 – Database Language SQL (SQL-99)
「DBIC で count したもので order by する方法」への1件の返信
DBIC で件数順に並び変える(count したものにorder by)
count を取ってそれを表示するのは次のコードで問題ないです。まあ、想像どおりですね。my @ranking_posts = $c->model(…