PerlさんPerlくん
[perl][mySQL][Module]Class::DBI::Sweetのまとめ
最終更新:
atwikimyj
-
view
FAQ
Q1.Class::DBI::AutoLoaderとの共存はできないのですか?
A1.共存できないみたいです。Sweetを使う場合は地道にClass定義をしないとだめ。ちなみに同時に使うとAutoloaderが優先されて、Sweet使用は無効になってしまいます。また、AutoLoaderで作られたクラス(実体がどこにあるかわからん)は一度その該当するテーブルを消さないと消えないみたい、、、。
A1.共存できないみたいです。Sweetを使う場合は地道にClass定義をしないとだめ。ちなみに同時に使うとAutoloaderが優先されて、Sweet使用は無効になってしまいます。また、AutoLoaderで作られたクラス(実体がどこにあるかわからん)は一度その該当するテーブルを消さないと消えないみたい、、、。
Q2.Sweetを使うと何が便利?
A2.使わない場合はカウントや各種比較を全てperl上で行なわなけれ ばなりません。Mysql上で簡単に行なえるはずのソートや簡単な比較、likeなどが使えません(DBI->でSQL文をごりごり書けば別だけど)
A2.使わない場合はカウントや各種比較を全てperl上で行なわなけれ ばなりません。Mysql上で簡単に行なえるはずのソートや簡単な比較、likeなどが使えません(DBI->でSQL文をごりごり書けば別だけど)
Q3.Sweet上でのcountやlikeの使い方がよくわからない
A3.基本的には SQL::Abstructというモジュールのルールに従うようになっています。
SQL::Abstruct(日本語)
http://perldoc.jp/docs/modules/SQL-Abstract-1.17/Abstract.pod
A3.基本的には SQL::Abstructというモジュールのルールに従うようになっています。
SQL::Abstruct(日本語)
http://perldoc.jp/docs/modules/SQL-Abstract-1.17/Abstract.pod
■AND と OR
#ハッシュ
(連想配列)での定義
#条件式をハッシュで複数定義するとAND
#条件式を個別に囲み
、それを角括弧で囲むとOR
%criteria = (
#price
%criteria = (
=> { '<=', 70000 , '>=', 50000 } #AND 構文はハッシュ({}囲み)でペアでカンマ区切り
price => [{ '>=', 90000} ,{ '<=', 50000 }] #OR 構文は各条件を個別に{}囲み
);
price => [{ '>=', 90000} ,{ '<=', 50000 }] #OR 構文は各条件を個別に{}囲み
);
■比較演算子
#比較演算子
(<>=)やlikeはハッシュとして定義
#不等号は
''で囲み、さらにカンマを入れる
%criteria = ( name => [{ '>=', 90000} ,{ '<=', 50000 }] );#likeは括弧なしで普通に
=>でつなぐ
%criteria = ( name => [{ like => '%TR%'},{like => '%1.25%'} ] );
■取り出し
order_byなどを使ってソートすることが可能
order_by => 'price' #priceが低い順(昇順)
order_by => 'price DESC' #priceが高い順(降順)
例:
order_by => 'price' #priceが低い順(昇順)
order_by => 'price DESC' #priceが高い順(降順)
例:
$retieved_object = BJP::ItemList->retrieve_all({ order_by => 'price DESC' });
■カウント
count()で総数を出す
my $retieved_object_ct = BJP::ItemList->count();
count( 条件式 )で条件にあった数を出す
my $retieved_object_ct = BJP::ItemList->count( name => {like => '%TR%'});