Ruby on rails 如何在同一查询中订购两次

Ruby on rails 如何在同一查询中订购两次,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,如何在同一查询中订购两次?例如,我可以按以下顺序搜索前十名标记课程: categories = Category.all.limit(10).order(tags_count: :desc) 我也可以按字母顺序排列 categories = Category.all.order(title: :desc) 在查询了前十名已添加标签的课程后,您如何按标题排序?我试过了,但没用 categories = Category.all.limit(10).order(tags_count: :desc

如何在同一查询中订购两次?例如,我可以按以下顺序搜索前十名标记课程:

categories = Category.all.limit(10).order(tags_count: :desc)
我也可以按字母顺序排列

categories = Category.all.order(title: :desc)
在查询了前十名已添加标签的课程后,您如何按标题排序?我试过了,但没用

categories = Category.all.limit(10).order(tags_count: :desc).order(title: :desc)

您可以尝试按原始SQL表达式排序:

categories = Category.all.limit(10).order('tags_count desc, title desc')

您可以尝试按原始SQL表达式排序:

categories = Category.all.limit(10).order('tags_count desc, title desc')

你可以这样试试-

Category.order(tags_count: :desc, title: :desc).limit(10)

它将首先根据标签计数按降序排序,然后根据标题对排序结果集按降序排序。然后取前10个结果并返回这些结果。

您可以这样尝试-

Category.order(tags_count: :desc, title: :desc).limit(10)

它将首先根据标签计数按降序排序,然后对标题上的排序结果集按降序排序。然后取前10个结果并返回它们。

这是对我有效的查询。感谢@SebastianPalma的帮助

Category.where(id: Category.order(tags_count: :desc).limit(10)).order(title: :desc)

这是一个对我有用的问题。感谢@SebastianPalma的帮助

Category.where(id: Category.order(tags_count: :desc).limit(10)).order(title: :desc)


什么意思?我们试图对Category.all.limit10.ordertags\u count::desc by title返回的整个结果集进行排序。我试着只订购具有相同标签的类别,在我看来,这就是订单的工作原理。试试这个类别。whereid:Category.ordertags_count::desc.limit10.ordertitle::desc.@Sabastian,你能解释一下这里需要子查询吗?我认为其他两个答案应该可以很好地解决问题。我想我基本上理解了这个查询,我假设这比在Ruby中按字母顺序排序更有效。谢谢@SebastianPalma-我一直在等着给你评分,但我会回答我自己的问题,你说的“没有成功”是什么意思?我们正在尝试对Category.all.limit10.ordertags_count::desc by title返回的整组结果进行排序。我试着只订购具有相同标签的类别,在我看来,这就是订单的工作原理。试试这个类别。whereid:Category.ordertags_count::desc.limit10.ordertitle::desc.@Sabastian,你能解释一下这里需要子查询吗?我认为其他两个答案应该可以很好地解决问题。我想我基本上理解了这个查询,我假设这比在Ruby中按字母顺序排序更有效。谢谢你@SebastianPalma-我一直在等着给你评分,但我会回答我自己的问题,型号之间没有区别。限制…订单。。。和Model.order…limit…,两者都不是Model.order…order。。。和Model.order…,,生成的SQL总是将LIMIT子句放在语句的末尾,ActiveRecord::QueryMethodsorder是可链接的,所以它是一样的。@SebastianPalma是的,我知道。但我的答案试图实现两件事——1告诉我一个更好的方法来编写相同的查询2解释为什么它可能无法按照OP的要求工作,因为第二次排序发生在已经排序的集合上。这不会按字母顺序返回结果。我相信它会按字母顺序排列具有相同标签的类别。我们需要从Category.all.limit10.ordertags_count::desc按标题字母顺序对整个结果进行排序,这就是它要做的。你所说的似乎有点奇怪,如果你已经按照标签数量排序,然后你想再次按照标题的字母顺序对整个集合进行排序,那么标签数量的前一个顺序就不会保持了。我对sql不是很在行,但我们需要的是按字母顺序排序的前十个标签类别。我想我可以用Ruby对它们进行排序,但我希望我不必这么做。模型之间没有区别。限制…顺序。。。和Model.order…limit…,两者都不是Model.order…order。。。和Model.order…,,生成的SQL总是将LIMIT子句放在语句的末尾,ActiveRecord::QueryMethodsorder是可链接的,所以它是一样的。@SebastianPalma是的,我知道。但我的答案试图实现两件事——1告诉我一个更好的方法来编写相同的查询2解释为什么它可能无法按照OP的要求工作,因为第二次排序发生在已经排序的集合上。这不会按字母顺序返回结果。我相信它会按字母顺序排列具有相同标签的类别。我们需要从Category.all.limit10.ordertags_count::desc按标题字母顺序对整个结果进行排序,这就是它要做的。你所说的似乎有点奇怪,如果你已经按照标签数量排序,然后你想再次按照标题的字母顺序对整个集合进行排序,那么标签数量的前一个顺序就不会保持了。我对sql不是很在行,但我们需要的是按字母顺序排序的前十个标签类别。我想我可以使用Ruby对它们进行排序,但我希望我不必这样做。您不需要在类别中添加所有内容。所有活动记录将自动拾取,即使您在使用限制或顺序时未提及。您不需要在类别中添加所有内容。所有活动记录将自动拾取,即使是y 当使用限制或顺序时,您不会提到它