0

我正在尋找類似的方式來查詢數據庫like this,但努力如何去做我想要的。查詢rails db列

我不只是尋找答案,我也尋求你在哪裏找到使用的方法。我已經搜索了postgres數據庫查詢,rails數據庫查詢,但沒有顯示出符合我想要的,甚至關閉。

foo = "a,b,c,d" 
b.bar #=> "b,d,a,f,z" Code shorten for the B Class. 

B.where('bar like ?', "%#{foo}") 

我知道沒有任何回報。如果foo的值包含在b.bar列中,則需要將其返回。

如果foo = "a",我會得到一個結果,但foo可以有多個值。

使用Ruby 2.2.5的Im。 Rails 5. DB:PostgreSQL

如果代碼非常簡單,將升級到Ruby 2.3。

+1

這可以通過使用多個'LIKE'條件與'OR'或正則表達式結合來完成。但它真的值得嗎?有些查詢通常很慢,因爲它們不能使用索引。一個更好的解決方案是對數據進行規範化處理,並將具有'has_and_belongs_to_many'關聯性的'foos'表關聯到'B'。您可能需要考慮更改數據庫模式。 – spickermann

+0

我在想同樣的事情。我可能需要像你說的那樣改變模式。 – Sylar

回答

0

你應該做的實際查詢之前的一些前期工作,開始建設like條件在分隔的,列表,然後每個項目與邏輯or鏈接它們:

conditions = b.bar.split(',').map{|x| B.arel_table[:bar].matches("%#{x}%") } 

B.where conditions.reduce(:or) 
0

這是找到一個場比賽中的數組的方式:

B.where(bar: ["a", "b", "c"]) 

它將使用SQL IN operator