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_id
或invited_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
查詢更真實的我想要做的,沒有任何隱藏的陷阱?
到目前爲止,這個工程。它生成這個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
是的,這是錯的,它是剝去括號。我會替換這個庫太可怕了,無法處理這樣一個簡單的查詢。 – Blindy
我正在使用ActiveRecord,因此完全不可能替換庫。 – marcamillion