[英]Multiple like conditions in active record
我需要對照多個類似語句檢查記錄,最好的方法是什么? 即
names = ['alice', 'bob', 'mark']
我在數據庫或(Peoples)中有說表的人,所以我想選擇所有具有上述3個名字的人。
找到了這個答案:
https://stackoverflow.com/a/5333281/169277
對於使用like,但我不知道如何傳遞值數組而不是單個值。 有任何想法嗎?
更新:
我需要這樣,因為人們有兩個名字
有很多插件可以提供這種查詢,但是您真正需要的只是Arel 。
您需要使用類似以下內容的LIKE准備查詢參數
wildcard_names = names.collect { |name| "%#{name}%" } # => ["%alice%","%bob%","%mark%"]
然后,您使用了Arel的#matches_any
方法。
people_table = People.arel_table
People.where(people_table[:name].matches_any(wildcard_names))
如PriteshJ所述,添加to_sql
以確認查詢正確。
嘗試這個
names = ['alice', 'bob', 'mark']
Person.where('name REGEXP ?',names.join('|'))
在與單個列上的多個值進行匹配時,您可以使用REGEXP而不是LIKE
這將生成帶有in子句的sql語句
檢查生成的sql,只需添加.to_sql
Person.where('name REGEXP ?',names.join('|')).to_sql
這將起作用。
Person.where('name SIMILAR TO ?',"(alice|bob|mark)")
也可以進行高級匹配
Person.where('name SIMILAR TO ?',"%(alice|bob|mark)%")
如果名稱為“ jon alice”(即正則表達式匹配),則上面的行也將起作用。
請參閱postgresql文檔: http : //www.postgresql.org/docs/9.0/static/functions-matching.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.