2016-04-21 57 views
0

我有一些問題的SQL查詢Rails的SQL查詢關鍵詞,比如

我已經具有的技能

def skills=(value) 
    super(value.reject(&:blank?).join("|")) if !value.nil? 
    end 

    def skills 
    super.present? ? super.split("|") : [] 
    end 

這裏是我的問題的用戶。當我用「like」來查詢這個字段時,字序問題。我怎樣才能避免這種情況?

User.where("skills LIKE '%car%driving_license%'") 

與技能,這至少包括汽車和driving_license

User.where("skills LIKE '%driving_license%car%'") 

每個用戶至少包含汽車和driving_license技能,但以不同的順序

我希望能夠每個用戶避免這個訂單問題。任何幫助?

+0

一個辦法是到'skills'串在你的Ruby代碼分裂,然後檢查每個技能對所接受的技能,例如列表'where skill1 IN('driving_license','car')AND skill2 IN('driving_license','car')AND ...' –

回答

1

如果你的技能排序,你可以知道訂單和組裝類似的查詢,將匹配他們兩個。您可以創建一個遷移來對現有技能進行排序。

def skills=(value) 
    super(value.reject(&:blank?).sort.join("|")) if value 
end 

rails g migration sortUserSkills

User.where.not(skills: nil).each do u 
    u.skills = u.skills 
    u.save 
end 
+0

這是一個好主意,我會嘗試一下,如果它工作的話就回來!謝謝 – Thounder

+0

這似乎工作。謝謝 :) – Thounder

1

LIKE + OR如果我的記憶爲我服務,那麼查詢就很困難。你可以試試AREL,但我認爲你失去了LIKE。

兩件事我能想到的:

  1. 單獨執行的查詢和結果相結合。

  2. 使用這樣的事情可能無法正常工作:

    conditions = ['%driving_license%car%', '%car%driving_license%'] User.where("skills LIKE ?", conditions)