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使えばいい話だけど。かなり無理矢理だけど一応使えると言う事で。
参考
More from my site
[Perl] DBIx::SkinnyでGROUP BY句を使うには ※何故か記載が全体的にORDER BY句になっていたので修正...
DBIx::SkinnyでGROUP BY句を使う
DBIx::SkinnyでGROUP […]
DBIx::Customでデータベースの関数(MySQLのADDDATE()とかSUBDATE()とか)を使う DBIx::Customが生SQL感覚でも使えてお気に入りなのだけれど、ちょっこしハマったのでメモ。
DBIx::Custom - search.cpan.org
MySQL(に限らないと思う)でwhereに関数を利用したい時は多々あると思います。
例えば、更新時刻を見て7日以上古ければ選択しないという条件をwhereに指定したい時、
CREATE […]
[Perl] DBIx::Class(DBIC)でtimestamp的なカラムの自動更新 今更ながらDBIx::Class(DBIC)に入門。使い始めてDBICの作法に翻弄されてる。
timestamp的なカラム、例えばupdated_atカラムを自動更新させるのにハマったのでメモ。
03日目: データモデル から抜粋
package Jobeet::Schema::ResultBase;
use strict;
use warnings;
use […]
MySQL(Tritonn)を複数インストール MySQL4.12が稼働しているサーバにMySQL5.0.67(Ttitonn)をインストールする(MySQL4.12はYUMでインストール済)
my.cnf (MySQL4.12)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old […]
CentOS5.3 PostfixをMySQL対応にする 2013-01-13追記
MySQL対応のPostfixはCentOS Plusリポジトリを使えばyumでupdate出来るみたい。こっちの方がいいね。
CentOS Plusリポジトリを有効にする
# vi /etc/yum.repos.d/CentOS-Base.repo
[centosplus]
name=CentOS-$releasever […]
MySQL DATETIME型へのINDEX注意点 MySQLのDATETIME型へインデックスをつける場合注意が必要。
例えばこんなSQLではインデックスが使用されない。
SELECT * FROM `table` WHERE `datetime` LIKE […]
Filed under: MySQL,perlモジュール
Trackback Uri
最近のコメント