我有一个名为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语句。