2012-12-13 90 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

謝謝。它工作完美。 –