第5項. Rhomで高度なクエリを使用する

Rhomは高度なクエリをサポートしている。

 1. 高度な検索を行う

Rhomで高度な検索を行うことができます。高度な検索を行う場合、Model.findの:conditionsオプションに複雑なクエリを指定することで可能となります。高度な検索は、Property Bagを使用しているテーブルにしか使用できません。

 

例:


Roster.find(:all, :conditions => [
  “LOWER(username) LIKE ・OR LOWER(company_name) LIKE ?”,
     “nishima”, “株式”],
  :select => [“username”, “company_name”]
)

 

上の検索を以下のように書き換えることができる。

 

Roster.find(:all, :conditions => [{
    {:func => “LOWER”, :name => “username”, :op => “LIKE”} => “nishima”,
    {:func => “LOWER”, :name => “company_name”, :op => “LIKE”} => “株式”,
  }, :op => “OR”],
  :select => [“username”, “company_name”]
)

 

また、IN演算子を使用し、以下のような検索を行うこともできる。


Roster.find(:all, :conditions => {
  {:name => “username”, :op => “IN”} => “'仁島拓哉', '落合薫'”,
  :select => [“username”, “company_name”]
)
もしくは
Roster.find(:all, :conditions => {
  {:name => “username”, :op => “IN”} => [“仁島拓哉”, “落合薫”]
  :select => [“username”, “company_name”]
)

 

検索条件を別に指定して、合わせて使用することもできます。

 

cond1 = {
  :conditions => {
    {:func => “UPPER”, :name => “address”, :op => “LIKE”} => “%西津田%”,
    {:func => “UPPER”, :name => “company_name”, :op => “LIKE”} => “株式%”,
  }, :op => “OR”
}
cond2 = {:conditions => {{:name => “username”, :op => “LIKE”} => “仁島%” }}

@rosters = Roster.find(:all,
  :conditions => [cond1, cond2], :op => “AND”,
  :select => [“username”, “company_name”, “address”]

)

システム工房エムのサイトへのリンク

住所〒690-0017 島根県松江市西津田3-2-3 TEL.0852-23-8590 FAX.0852-23-8591
Copyright 2008-2010 System Maker M,All right reserved