DBIx::Skinny の resultset を使って変な ORDER BY 句を使えるかの実験
- 2013.05.28
- MySQL perlモジュール
- DBIx::Skinny, MySQL, ORM
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) 2013年5月27日
MySQL - SELECT ... WHERE id IN (..) - correct order - Stack Overflow
という事で、MySQLでこんなSQLが使えるとの事。
SELECT * FROM table WHERE id IN (4,3,1) ORDER BY FIELD(id,4,3,1)
なので、PerlのORMであるDBIx::SkinnyでSQL組み立てられるのか実験してみる。
my @id_lists = (4,3,1); $" = ","; #" my $rs = MyModel->resultset; $rs->select([qw/*/]); $rs->from(['entry']); $rs->add_where('id' => { 'IN' => \@id_lists }); $rs->order({ 'column' => "FIELD(id, @id_lists)" }); warn $rs->as_sql; ----- 実行結果 SELECT * FROM entry WHERE (id IN (?,?,?)) ORDER BY FIELD(id, 4,3,1)
特殊変数 $" で 配列展開時の区切り文字を ,(カンマ) にしている。DBIx::Skinnyなんだから生のSQL使えばいい話だけど。かなり無理矢理だけど一応使えると言う事で。
目次
参考
-
前の記事
Gunma.web#13でLTしました 2013.05.22
-
次の記事
[mac]Mountain LionにmacportsでMongoDBをインストール 2013.06.02