以下是我的两个班级
class Users {
String emailAddress
String password
// String filename
String firstName
String lastName
Date dateCreated
Date lastUpdated
}
和
class SharedDocuments {
Users author
Users receiver
Documents file
static constraints = {
}
}
我想运行类似于这个的查询,基本上我想获得所有用户的列表以及他们创作的文档数量
SELECT author_id, COUNT(SharedDocuments.id )FROM SharedDocuments
INNER JOIN users ON author_id = users.id
GROUP BY author_id
这是我到目前为止所拥有的
def sharedDocumentsInstanceList = SharedDocuments.createCriteria().list(params){
createAlias("author","a")
eq("receiver.id",session.uid)
projections{
groupProperty "author"
count "id",'mycount'
}
order('mycount','desc')
maxResults(params.max)
}
我有90%的工作,如果我摆脱count
或countDistinct
我得到了不同作者的名单,但我想要的是作者以及文件数量。因此,当我将count或countDistinct子句添加到此条件时,我只是获得了很长的数组!!
像[2,3,4]我想要的是[[author1,2],[author2,3] ...]
我怎么能得到这个我已经看过Grails: Projection on many tables?,
Grails criteria projections - get rows count,
Grails groupProperty and order. How it works?,
但没有一个答案似乎解决了我的问题!
答案 0 :(得分:0)
难道你不能只使用countBy * - 比如
SharedDocuments.countByAuthorAndReceiver(user, receiver)
答案 1 :(得分:0)
如果您想要在查询中描述的结果,那么您需要作者的ID或任何其他特定属性,如电子邮件。
def sharedDocumentsInstanceList = SharedDocuments.createCriteria().list(params){
eq("receiver.id",session.uid)
projections{
groupProperty "author"
count "id",'mycount'
}
order('mycount','desc')
maxResults(params.max)
}
答案 2 :(得分:0)
分页预测有一个错误,它只返回投影块中的最后一个字段。当前的grails 2.1.5修复了这个bug。以下是报告的错误http://jira.grails.org/browse/GRAILS-9644