2

以下是我的两节课

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)
}

如果我摆脱countcountDistinct获得不同作者的列表,我有这 90% 的工作,但我想要的是作者以及文档数量。因此,当我将 count 或 countDistinct 子句添加到此标准时,我只会得到 long 数组!像 [2,3,4] 我想要的是 [[author1,2],[author2,3] ...] 我怎样才能实现这个我已经看过Grails:在许多表上的投影?, Grails 标准预测 - 获取行数, Grails groupProperty 和 order。这个怎么运作?,但似乎没有一个答案能解决我的问题!

4

3 回答 3

1

分页投影有一个错误,它只返回投影块中的最后一个字段。当前的 grails 2.1.5 已修复此错误。这是报告的错误http://jira.grails.org/browse/GRAILS-9644

于 2013-05-18T17:23:29.977 回答
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)
}
于 2012-04-19T08:06:11.597 回答
0

你不能只使用 countBy* - 比如

    SharedDocuments.countByAuthorAndReceiver(user, receiver)
于 2012-04-19T05:28:14.113 回答