2015-11-05 62 views
0

我有以下查詢:如何修改此where子句以檢查列中SQL是否有無值?

user.all_memberships.where("user_id = ? OR invited_id = ?", user2.id, user2.id) 

這是我membership模型的樣子:

#<Membership id: 4, family_tree_id: 3, user_id: 1, created_at: "2015-10-23 20:33:41", updated_at: "2015-10-23 20:33:41", relation: nil, invited_id: nil> 

我想什麼查詢也籤是,如果relation != nil ....但不知道如何在用引號引入到where子句的SQL中表示。

換句話說,我希望它檢查user_idinvited_id列中是否存在user2.id。但是... relation也必須不是零。

我該怎麼做?

編輯1

當我做下面的查詢,如下面Blindy的建議:

user.all_memberships.where("relation is not null and user_id = ? OR invited_id = ?", user2.id, user2.id) 

它生成此查詢,似乎工作,但基於它生成我的SQL對此感到緊張。注意該聲明的第二部分和第二部分。感覺它可能偶爾會返回誤報。

(0.9ms) SELECT COUNT(*) FROM "memberships" WHERE (memberships.user_id = 1 OR memberships.invited_id = 1) AND (relation is not null and user_id = 2 OR invited_id = 2) 

如何定製AR where查詢更真實的我想要做的,沒有任何隱藏的陷阱?

回答

1

這並不完全清楚,但我想你的意思是這樣的:

relation is not null and (user_id = ? OR invited_id = ?) 
+0

到目前爲止,這個工程。它生成這個SQL語句:'(0.9ms)SELECT COUNT(*)FROM「memberships」WHERE(memberships.user_id = 1或memberships.invited_id = 1)AND(關係不爲null,user_id = 2或者invite_id = 2) 。注意第二個「AND」和聲明的第二部分。感覺它可能偶爾會返回誤報...我錯了嗎? – marcamillion

+0

是的,這是錯的,它是剝去括號。我會替換這個庫太可怕了,無法處理這樣一個簡單的查詢。 – Blindy

+0

我正在使用ActiveRecord,因此完全不可能替換庫。 – marcamillion