铁轨先按范围排序



我有一个名为Group的模型,它有很多用户

组包含min_age和max_age字段,用于描述具有最小年龄和最大年龄的用户。

每个用户都有自己的设置,可以设置18至25岁的等首选年龄组

当用户搜索组时,我首先订购年龄为18至25岁的组,然后订购其他

我用两个类似的查询来完成

groups = Group.where("min_age >=? AND max_age <=?", setting.min_age, setting.max_age)
+ Group.where("min_age <? OR max_age >?", setting.min_age, setting.max_age) 

它起作用了,但问题是我有太多的其他过滤器,我想减少查询的数量。

是否可以在单个查询中执行此操作?

您可以在不匹配的记录之前对匹配的记录进行排序:

Group.order("CASE WHEN min_age >= #{setting.min_age} AND max_age <= #{settings.max_age} then 1 else 2 end")

请参阅:SQL CASE语句。

最新更新