Rails MySQL查询使用where语句

时间:2014-06-27 10:09:23

标签: mysql sql ruby-on-rails

我有这个用户:

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>

我的查询有什么问题?

3 个答案:

答案 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,它只是存储为字符串吗?例如varchartext列?

作为替代方案,您还可以使用IN运算符

User.where("role IN (?, ?, ?) AND status = ?", "role1", "role2", "role3", true)