我想按两列排序,一列是DateTime(updated_at),另一列是Decimal(Price)我希望能够先按updated_at排序,然后,如果同一天出现多个项目,则按价格排序。
updated_at
2exbekwf1#
在Rails 4中,你可以做类似的事情:
Model.order(foo: :asc, bar: :desc)
foo和bar是db中的列。
foo
bar
tf7tbtn22#
假设您使用的是MySQL,
Model.all(:order => 'DATE(updated_at), price')
注意与其他答案的区别。updated_at列将是一个完整的时间戳,因此如果您想根据更新的天进行排序,则需要使用一个函数从时间戳中获取日期部分。在MySQL中,这是DATE()。
DATE()
vwhgwdsa3#
Thing.find(:all, :order => "updated_at desc, price asc")
就可以了。
Thing.all.order("updated_at DESC, price ASC")
是Rails 3的出路。(谢谢@cpursley)
ippsafx74#
Active Record Query Interface允许您指定任意数量的属性来对查询进行排序:
models = Model.order(:date, :hour, price: :desc)
如果您想了解更多信息(感谢@zw963):
models = Model.order(price: :desc, date: :desc, price: :asc)
额外的好处:在第一个查询之后,您可以链接其他查询:
models = models.where('date >= :date', date: Time.current.to_date)
vcudknz35#
实际上,使用Active Record有很多方法。上面没有提到的一种方法是(以各种格式,所有有效):
Model.order(foo: :asc).order(:bar => :desc).order(:etc)
也许它更冗长,但我个人觉得它更容易管理。SQL只需要一个步骤就可以生成:
SELECT "models".* FROM "models" ORDER BY "models"."etc" ASC, "models"."bar" DESC, "models"."foo" ASC
因此,对于原始问题:
Model.order(:updated_at).order(:price)
您不需要声明数据类型,ActiveRecord可以顺利地完成此操作,您的DB引擎也是如此
disbfnqx6#
Model.all(:order => 'updated_at, price')
v09wglhw7#
你只能用逗号来分隔
.where(your query).order("name desc, status asc")
ccgok5k58#
这些都对我不起作用!在整整2天的互联网上上下寻找之后,我找到了解决方案!!假设您在products表中有许多列,包括:special_price和msrp。这是我们尝试排序的两个列。好的,首先在你的模型中添加这行:
named_scope :sorted_by_special_price_asc_msrp_asc, { :order => 'special_price asc,msrp asc' }
其次,在Product Controller中,添加需要执行搜索的位置:
@search = Product.sorted_by_special_price_asc_msrp_asc.search(search_params)
8条答案
按热度按时间2exbekwf1#
在Rails 4中,你可以做类似的事情:
foo
和bar
是db中的列。tf7tbtn22#
假设您使用的是MySQL,
注意与其他答案的区别。
updated_at
列将是一个完整的时间戳,因此如果您想根据更新的天进行排序,则需要使用一个函数从时间戳中获取日期部分。在MySQL中,这是DATE()
。vwhgwdsa3#
就可以了。
更新:
是Rails 3的出路。(谢谢@cpursley)
ippsafx74#
Active Record Query Interface允许您指定任意数量的属性来对查询进行排序:
如果您想了解更多信息(感谢@zw963):
额外的好处:在第一个查询之后,您可以链接其他查询:
vcudknz35#
实际上,使用Active Record有很多方法。上面没有提到的一种方法是(以各种格式,所有有效):
也许它更冗长,但我个人觉得它更容易管理。SQL只需要一个步骤就可以生成:
因此,对于原始问题:
您不需要声明数据类型,ActiveRecord可以顺利地完成此操作,您的DB引擎也是如此
disbfnqx6#
v09wglhw7#
你只能用逗号来分隔
ccgok5k58#
这些都对我不起作用!在整整2天的互联网上上下寻找之后,我找到了解决方案!!
假设您在products表中有许多列,包括:special_price和msrp。这是我们尝试排序的两个列。
好的,首先在你的模型中添加这行:
其次,在Product Controller中,添加需要执行搜索的位置: