2012-12-13 94 views
0

我有两个领域类:如何在Grails中执行此查询?

class User { 
    String nickname 
} 

class Episodes { 
    String name 
    User sentBy 
} 

我想打一个排名是谁已派出更多的情节。

所以我做了这个查询,并给了我想要的结果。

SELECT user.nickname, count(episodes.id) total 
FROM user 
JOIN episodes on user.id = episodes.sent_by 
GROUP BY user.nickname 
ORDER BY total DESC 

什么是在我的控制器中运行此查询的最佳方式是什么?怎么样?

+1

不应该在你的控制器上运行,它应该在的服务。 – doelleri

+0

http://grails.org/doc/latest/ref/Domain%20Classes/createCriteria.html –

+0

@doelleri - 查询在控制器中是正常的,但更新应该是事务性的和在服务中。 –

回答

0

我会用HQL此:

def results = User.executeQuery(
    'SELECT e.sentBy.nickname, count(e) as total ' + 
    'FROM Episodes e ' + 
    'GROUP BY e.sentBy.nickname ' + 
    'ORDER BY total desc') 

其结果将是对象[]阵列的列表,与所述第一元件是所述昵称和所述第二被计数,例如

for (Object[] row in results) { 
    println "User ${row[0]} has ${row[1]} episodes" 

}

+0

谢谢。它工作完美。 –