【发布时间】:2010-04-06 07:11:05
【问题描述】:
我有很多主题对象,每个主题都有很多帖子:发布 如何根据帖子数对所有主题对象进行排序??
【问题讨论】:
标签: grails grails-orm
我有很多主题对象,每个主题都有很多帖子:发布 如何根据帖子数对所有主题对象进行排序??
【问题讨论】:
标签: grails grails-orm
您可以使用 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 节提示和技巧。
【讨论】:
您可以这样做,但它需要两个查询。这是因为要按集合的大小排序,您需要使用“分组依据”,但这需要您枚举所有主题属性。如果您添加或删除一个查询将中断。所以解决方案是运行一个查询来查找有序 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)
【讨论】: