在 Grails 中使用条件对多个字段进行排序
Posted
技术标签:
【中文标题】在 Grails 中使用条件对多个字段进行排序【英文标题】:Sorting on multiple fields with criteria in Grails 【发布时间】:2009-08-20 04:41:07 【问题描述】:我有以下查询,其中 id 喜欢按“raceDate”和“raceNo”asc 排序。我可以弄清楚如何按一个字段排序,但不能按两个字段排序,有什么想法吗?
def list =
params.max = Math.min( params.max ? params.max.toInteger() : 20, 100)
params.offset = params?.offset?.toInteger() ?: 0
params.sort = "raceDate"
params.order = params?.order ?: "asc"
def results = Race.createCriteria().list(
max: params.max,
offset: params.offset,
sort: params.sort,
order: params.order
)
and
if (params.raceNo && params.raceNo != '')
eq("raceNo", params.raceNo.toInteger())
if (params.country && params.country != '')
eq("country", params.country)
if (params.venue && params.venue != '')
eq("venue", params.venue)
if (params.raceType && params.raceType != '')
eq("raceType", params.raceType)
if (params.surface && params.surface != '')
eq("surface", params.surface)
if (params.officialGoing && params.officialGoing != '')
eq("officialGoing", params.officialGoing)
if (params.raceDateStart_year && params.raceDateStart_month && params.raceDateStart_day
&& params.raceDateEnd_year && params.raceDateEnd_month && params.raceDateEnd_day)
String startInput = "$params.raceDateStart_year/$params.raceDateStart_month/$params.raceDateStart_day"
Date startDate = jodaFormatter.parseDateTime(startInput).toDate();
String endInput = "$params.raceDateEnd_year/$params.raceDateEnd_month/$params.raceDateEnd_day"
Date endDate = jodaFormatter.parseDateTime(endInput).toDate();
between("raceDate", startDate, endDate)
[ raceInstanceList:results, raceInstanceTotal:results.totalCount, params:params ]
【问题讨论】:
我认为你的例子可以减少一点。 class Foo String name int age 那么请问,如何使用 GORM 条件先按姓名排序,再按年龄排序? [已在此回答][1] [1]:***.com/questions/326053/… 【参考方案1】:这样的事情应该可以工作:
def results = Race.createCriteria().list(
max: params.max,
offset: params.offset,
sort: params.sort,
)
order('raceDate', 'asc')
order('raceNo', 'asc')
and
if (params.raceNo && params.raceNo != '')
eq("raceNo", params.raceNo.toInteger())
...
【讨论】:
这不起作用,并抛出错误:列“table.RaceNo”在 ORDER BY 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中。以上是关于在 Grails 中使用条件对多个字段进行排序的主要内容,如果未能解决你的问题,请参考以下文章