2015-11-05 27 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

相关问题