4

たとえば、モデルがある場合:

User :firstname   :lastname
     joseph       smith
     anna         bauer
     ...          ...

そして、ユーザーを検索できる入力フィールド。異なる検索クエリは次のとおりです。

  searchquery1:  smith joseph
  searchquery2:  joseph smith
  searchquery3:  joseph
  searchquery4:  smith

SQL のどの検索クエリが最適でしょうか? 実際、次の検索クエリを想像できました。

  where 'firstname OR lastname  LIKE ?', "%#{search}"

初挑戦:

def self.search(search)
 if search
   select('CONCAT(vorname, " ", nachname) as full_name, *')
   where ['vorname LIKE :s OR nachname  LIKE :s OR full_name LIKE :s', :s => "%#{search}"]
 else
  scoped
 end
end

エラー:SQLite3::SQLException: no such column: full_name

2 回目の試行:

def self.search(search)
 if search
  a = search.split
   where('firstname OR lastname  LIKE ?', a[1])
   where('firstname OR lastname  LIKE ?', a[2]) unless a[2].nil?
  else
  scoped
 end
end

問題: 何も見つからない!

4

4 に答える 4

5

はい、このように姓と名の両方で検索する必要があります

select('(firstname || " " || lastname) as \'full_name\', *')
where ['firstname LIKE :s OR lastname  LIKE :s OR full_name LIKE :s', :s => "%#{search}"]

ただし、データが大きすぎる場合。Solr や thinkin sphinx などの全文検索エンジンを使用できます

于 2013-09-18T10:04:55.787 に答える
0

名、姓、フルネームで検索する。

Member.where ['first_name LIKE :s OR last_name LIKE :s OR CONCAT(first_name,last_name) LIKE :s', :s => "#{search.delete(' ')}"]

できます!

于 2016-06-16T04:18:20.887 に答える
-1

はい、姓と名で検索したい場合は、次のことを行う必要があります。

User.where('firstname or lastname like ?', params[:search])

別の解決策: https://github.com/ernie/squeelhttps://github.com/ernie/squeel#predicates

于 2013-09-18T10:03:44.550 に答える
-1
User.where("(first_name || ' ' || last_name) like :q", :q => params[:search])
于 2016-05-07T04:44:21.830 に答える