簡體   English   中英

活動記錄中有多個類似條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM