ユーザ用ツール

サイト用ツール


alpersist:検索

検索

  • データを選択的に読み込むために、検索用のメソッドを用意しています。
  • 検索条件等を指定して、複数のレコードを読み込みます。
  • ベースになるデータストレージの機能によっては、フルスペックで使えない場合があります。

簡単な使い方

  def action_search()
    param = { :where=>{ :age=>20 } }
    results = @person.search( param )
    results.each {|data|
      puts data.values, "<br>"
    }
  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, "<br>"
    }
  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;
alpersist/検索.txt · 最終更新: 2019/02/12 00:06 by hirohito