按Grails中的关联计数排序

时间:2010-04-06 07:11:05

标签: grails gorm

我有很多主题对象,每个主题都有很多帖子:帖子 如何根据帖子数量来订购所有Topic对象?

2 个答案:

答案 0 :(得分:7)

您可以在一个带有size()函数的HQL查询中执行此操作。这样您就可以在一个查询中获得主题实例:

SELECT topic
FROM Topic topic
ORDER BY size(topic.posts)

我在http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html上找到了这个,第14.16节提示&技巧。

答案 1 :(得分:1)

你可以这样做,但它需要两个查询。这是因为要按集合的大小排序,您需要使用'group by',但这需要您枚举所有Topic属性。如果添加或删除一个查询将中断。因此,解决方案是运行一个查找有序ID的查询,另一个查询获取这些ID的实例:

String hql = '''
SELECT t.id
FROM Topic t LEFT JOIN t.posts AS post
GROUP BY t.id
ORDER BY COUNT(post) DESC
'''
def ids = Topic.executeQuery(hql)
def orderedTopics = Topic.getAll(ids)