====== 検索 ====== * データを選択的に読み込むために、検索用のメソッドを用意しています。 * 検索条件等を指定して、複数のレコードを読み込みます。 * ベースになるデータストレージの機能によっては、フルスペックで使えない場合があります。 ===== 簡単な使い方 ===== def action_search() param = { :where=>{ :age=>20 } } results = @person.search( param ) results.each {|data| puts data.values, "
" } end
* パラメータとして、検索条件を指定する例です。 * この例では、年齢が20才の人のみ抽出します。 * 検索条件は、AND結合のみです。 ===== 検索条件 ===== 複合条件。HashキーをSymbolで指定した場合は、常に=(イコール)で比較します。 :where=>{ :name=>"Ishikawa", :age=>20 } NULL条件の指定。( SQLでは、name is nullとなる) :where=>{ :name=>nil } 以上、以下などの指定 :where=>{ "age <"=>20 } Like検索 :where=>{ "name like"=>"I%" } ===== 並べ替え順 ===== パラメータに、:order_byキーを追加します。 def action_search() param = { :order_by=>"age desc" } results = @person.search( param ) results.each {|data| puts data.values, "
" } end
複数のオーダー指定は、配列で指定します。 :order_by=>["age desc", "name asc"] ===== その他の条件 ===== リミット、オフセット param = { :limit=>2, :offset=>5 } リミットを指定した場合は、検索後、以下のメソッドが有効になります。 # 前ページのオフセット値を得る。前ページがなければnil。 @person.get_previous_offset() # 次ページのオフセット値を得る。次ページがなければnil。 @person.get_next_offset()] 全件数の同時取得 def action_search() param = { :total_rows=>true } @person.search( param ) p @person.search_condition[:total_rows] end ====== SQLを直接発行して検索する ====== * SQLを直接指定して、検索することができます。 * この場合は、オブジェクト生成時に指定したテーブル名及びプライマリキーは使われず、任意のSQLが発行できます。 * RDBをベースに持つPersistクラスしかサポートしません。 * select( "取得するタプル", "FROM句以下", param = {} ) の形式です。 * paramは、上記searchと同様です。 コード例 @persist.select( "t1.*, t2.note" "from t1 inner join t2 using(id) where d=CURRENT_DATE", :order_by=>"create_date desc", :limit=>10, :offset=>20 ) 生成されるSQL select t1.*, t2.note from t1 inner join t2 using(id) where d=CURRENT_DATE order by create_date desc limit 10 offset 20;