Sql RubyonRails以最高价格获得记录
我有一个叫Orders的Rails模型,它有一个类型id、位置和价格。每种类型可以在同一地点有多个价格不同的订单。检查下面的表格结构的想法Sql RubyonRails以最高价格获得记录,sql,ruby-on-rails,activerecord,find,sql-order-by,Sql,Ruby On Rails,Activerecord,Find,Sql Order By,我有一个叫Orders的Rails模型,它有一个类型id、位置和价格。每种类型可以在同一地点有多个价格不同的订单。检查下面的表格结构的想法 id | type_id | location_id | price ----------------------------------- 1 | 1 | 1 | 12 2 | 1 | 1 | 14 3 | 1 | 1 | 9 4 | 2 |
id | type_id | location_id | price
-----------------------------------
1 | 1 | 1 | 12
2 | 1 | 1 | 14
3 | 1 | 1 | 9
4 | 2 | 1 | 1
5 | 2 | 1 | 4
6 | 3 | 1 | 15
7 | 3 | 1 | 7
我基本上希望使用示例中的按类型_id选择所有记录:
type_ids = "1,2,3"
location_id = 1
Order.find(:all, :conditions => ["location_id = ? and type_id in (?)", location_id, type_ids])
我只想为该位置的每种类型选择价格最高的记录,因此结果集将带回ID为2、5和6的记录
我似乎无法找到这个问题的答案,我希望你理解我的意思。如果不问,我可以试着更好地解释
干杯
Eef如果您只想获得条件的最高价格,您可以使用
Order.find(:first, :conditions => ["location_id = ? and type_id in (?)", location_id, type_ids], :order => 'price DESC')
…因为该查询会将匹配的记录从最高价格到最低价格排序,然后给出第一条记录(最高价格)
如果您想要每种类型的最高价格项目,您可能需要打破Rails的查询构建,使用find\u by\u sql
to(类似于SELECT*,MAX(price)FROM orders,其中location\u id=?和type\u id IN(?)按类型分组(id
),但我想对您的数据库运行该查询几次,以完善它(我自己)
除非您的type\u id
s的数量非常大(例如成百上千),否则只需对每个类型运行上述查询一次并将所有结果放在一个数组中可能会更简单;MySQL查询速度会快得多,特别是对于大量的type\u id
s,但是在Rails中进行查询就足够了,除非您决定正确地进行MAX(price)
查询。我最初是用PHP编写应用程序的,我对每种类型的数据库都进行了查询,结果很好。我的类型永远不会超过44个,所以我想我可以采用更简单的方法,但我也会对查询进行一次尝试。谢谢你!