gpt4 book ai didi

grails - 使用Grails条件获得一个属性的不同结果

转载 作者:行者123 更新时间:2023-12-02 14:44:27 24 4
gpt4 key购买 nike

我想从数据库中的一个域类实例中获取最近的20条更新记录,但与某个属性不同,在我的情况下,该属性是color。我尝试了3种不同的方法,但似乎都没有按我预期的方式工作。
第一种方法:def corridors = TerminKorridor.findAll([max:20, sort:'lastUpdated', order:"desc"]).color.unique();可以,但是不会返回20个条目
第二种方法:

 def corridors = corridorsCriteria.list{
distinct("color")
maxResults(20)
order("lastUpdated", "desc")
}
不会删除相同颜色的条目。区别不起作用
第三种方法:
def corridors = TerminKorridor.executeQuery("Select distinct a.color from TerminKorridor a order by a.lastUpdated desc",[max:20])
不会删除相同颜色的条目, distinct不起作用。

最佳答案

因此,我认为您的逻辑在此处存在问题。

目标是获取由lastUpdated排序的20种不同颜色的列表。

如果您想要一个不同的列表,则不能按lastUpdated排序。这没有道理。如果您有3个颜色相同的商品,您将使用哪个lastUpdated进行订购?

您必须选择是否要获取最后20条记录,然后选择不同的颜色列表,这几乎肯定会导致少于20条记录

要么

您会得到20种不同颜色的列表

您可以使用一些代码来完成此操作。

LinkedHashSet<Color> colors = new LinkedHashSet()

try {
TerminKorridor.findAll([sort:'lastUpdated', order:"desc"]).each {
if (colors.size() < 20) {
colors.add(it.color)
} else {
throw new GetOutOfHereException()
}
}
} catch(GetOutOfHereException e) {
null
}

通过使用HQL仅加载颜色而不是整个对象,可以使此效果更好
TerminKorridor.executeQuery("select t.color from TerminKorridor t order by t.lastUpdated desc").each { ... }

关于grails - 使用Grails条件获得一个属性的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18184604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com