我有这个用户:
NAME _____ 角色 _________ 状态
user1 -------- role1 ---------------- true
user2 -------- role2 ---------------- true
user3 -------- role2 ---------------- false
user4 -------- role3 ---------------- false
user5 -------- role4 ---------------- true
我有这个问题:
User.where("role = ? OR role = ? OR role = ? AND status = ?", "role1", "role2", "role3", true)
我预计将检索的数据是:
用户1
用户2
但系统会检索用户3,即使他的状态为假。
我还尝试将AND
更改为OR
,但它会检索所有。{/ p>
我的查询有什么问题?
答案 0 :(得分:2)
查询的错误是“&OR”组周围缺少括号'
User.where("(role = ? OR role = ? OR role = ?) AND status = ?", "role1", "role2", "role3", true)
然而,正如另一个答案中所说,可以这样做更简单。
User.where(status: true).where(role: %w{role1 role2 role3})
答案 1 :(得分:1)
试试这个:
User.where(status: true).where(role: ["role1", "role2", "role3"])
答案 2 :(得分:1)
尝试使用括号对条件进行分组:
User.where("(role = ? OR role = ? OR role = ?) AND status = ?", "role1", "role2", "role3", true)
棘手的位可能是true
,它只是存储为字符串吗?例如varchar
或text
列?
作为替代方案,您还可以使用IN
运算符
User.where("role IN (?, ?, ?) AND status = ?", "role1", "role2", "role3", true)