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