※何故か記載が全体的にORDER BY句になっていたので修正…
DBIx::SkinnyでGROUP BY句を使う
DBIx::SkinnyでGROUP BY句は使えないっぽい。マニュアルにも無い。Tengでは使えるみたいだけれど。resultsetでSQL組み立てれば出来るのかと思ったのだけれどどうも無理っぽい。
で、ググっていたらテストにそれらしい記述があるのを発見。ただし、DBIx::Skinny::Pager のテスト。
https://github.com/walf443/p5-dbix-skinny-pager/blob/master/t/02-functional.t
$rs->group({ column => ‘カラム名’ });
どうやら groupというメソッドがあるようだ。やっぱりマニュアルに載ってないけど。
作っているwebアプリはページング処理をするために丁度 DBIx::Skinny::Pager を使ってたのでこの方法で。
コード
my $rs = $self->resultset_with_pager('MySQLFoundRows'); $rs->select([qw/ entry_id entry_title /]); $rs->from(['entry']); $rs->group({ column => 'category' }); $rs->add_where( entry_status => 'public' );
構築されるSQL
SELECT SQL_CALC_FOUND_ROWS entry_id, entry_title FROM entry WHERE (entry_status = ?) GROUP BY category
生SQL使えばいい問題なんだけどね 😛
Filed under: MySQL,perl,perlモジュール
Trackback Uri
最近のコメント