【发布时间】:2015-01-27 20:39:25
【问题描述】:
假设我有一张猫桌,每只猫都有独特的颜色。是否有一种 activerecord 方法可以用来在一个查询中获取红猫和蓝猫。我的目标是更快的查询,而不是使用 Cat.where(color: red) 单独查找每个,然后使用 blue 做同样的事情。
【问题讨论】:
标签: mysql ruby-on-rails ruby activerecord rails-activerecord
假设我有一张猫桌,每只猫都有独特的颜色。是否有一种 activerecord 方法可以用来在一个查询中获取红猫和蓝猫。我的目标是更快的查询,而不是使用 Cat.where(color: red) 单独查找每个,然后使用 blue 做同样的事情。
【问题讨论】:
标签: mysql ruby-on-rails ruby activerecord rails-activerecord
你可以这样做:
Cat.where(color: ['red', 'blue'])
这将生成 SQL 查询:
SELECT cats.* FROM cats WHERE cats.color IN ('red', 'blue')
【讨论】:
Cat.where(color: 'red').or.where(color: 'blue')
或
Cat.where("color = ? OR color = ?", "red", "blue")
或
Cat.where(color: ["red", "blue"])
【讨论】:
研究JOIN声明
你也可以在 where 中使用OR
where (color='blue' OR color='green')
检查:
【讨论】:
JOIN 并非如此。
JOIN 在这里不是问题。有时我们都会错过目标。只要删除你的答案,除非你能想出一个比另一个更好的答案,或者至少证明JOIN 可能是一个因素,因为不清楚你在做什么。这没什么大不了的,没有造成任何伤害,只是保持事物整洁的问题。我不得不删除许多错误的开始答案。如果你这样做,反对票就会消失。