ユーザ用ツール

サイト用ツール


alpersist:検索

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

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