2013年 9月 25

※何故か記載が全体的に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使えばいい問題なんだけどね 😛

More from my site

  • DBIx::Skinny の resultset を使って変な ORDER BY 句を使えるかの実験DBIx::Skinny の resultset を使って変な ORDER BY 句を使えるかの実験 WHERE id IN(4,3,1) OREDER BY FIELD(id,4,3,1) こんなSQLの書き方があったのか! RT: MySQL - SELECT ... WHERE id IN (..) - correct orde stackoverflow.com/questions/5090…— クリックテクスさん (@clicktx) […]
  • DBIx::Customでデータベースの関数(MySQLのADDDATE()とかSUBDATE()とか)を使うDBIx::Customでデータベースの関数(MySQLのADDDATE()とかSUBDATE()とか)を使う DBIx::Customが生SQL感覚でも使えてお気に入りなのだけれど、ちょっこしハマったのでメモ。 DBIx::Custom - search.cpan.org MySQL(に限らないと思う)でwhereに関数を利用したい時は多々あると思います。 例えば、更新時刻を見て7日以上古ければ選択しないという条件をwhereに指定したい時、 CREATE […]
  • perl SpeedyCGIでデータベースの接続を永続化するperl SpeedyCGIでデータベースの接続を永続化する perlスクリプトをSpeedyCGIスクリプトとして動作させる場合、グローバル変数の値は保持され続ける。なので、一度接続したデータベースハンドルを使い回すことでデータベースへの接続コストを削減できる。 テスト用スクリプト #!/usr/bin/speedy use strict; use warnings; use DBI; #DB用設定 my […]
  • MAMPな環境のmacにDBD::mysqlをインストールMAMPな環境のmacにDBD::mysqlをインストール OSX El Capitan(10.11.5) MAMPのバージョン 3.0.7.3 ※1 MySQLのバージョン 5.5.38 MAMPだとWarning (mostly harmless): No library found for […]
  • 連続で大量のデータをINSERTする実験連続で大量のデータをINSERTする実験 PERLでMySQLにデータを挿入する実験。 実験スクリプト INSERT を100万回繰り返す。 for(1..1000000){ $sql = <<"EOM"; INSERT INTO `table_name` (`col1`,`col2`,`col3`,`col4`) VALUES […]
  • MAMP(Apache+MySQL)を使ってローカルでらくらくperl開発MAMP(Apache+MySQL)を使ってローカルでらくらくperl開発 MAMP Apache+MySQLサーバをmacで動作させる事ができる。macにはもともとApacheもperlもインストールされているけど、バージョンが古いし、管理も面倒なのでMANPを使うメリットはおおいにあると思う。もともとはPHP+MySQLのローカル環境を構築するためのもの...かな? 参考:Mac OS Xのローカル環境(MAMP+MacPorts)で […]

Filed under: MySQL,perl,perlモジュール

Trackback Uri



コメントする