2012-04-19 3 views
2

を数えるには、私の二つのクラスGrailsの突起グループによって、以下の

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

iはcountまたはcountDistinctを取り除く場合、私は、私は投稿者のリストを取得するが、私は何をしたいことは、文書の数と一緒に著者である、この90%の作業を持っています。だから私はcountまたはcountDistinct句をこの基準に追加すると、私はちょうど長い配列を得る!!私が欲しいもの[2,3,4]のような は、私はこれをachiveすることができ、私はすでにGrails: Projection on many tables?Grails criteria projections - get rows countGrails groupProperty and order. How it works?、 が、どれもが見てきたどのように [[author1,2]、[author2,3] ...]です答えの私の問題を解決するようだ!あなたのクエリで説明したように、あなたは、著者のIDまたは電子メールなどの他の特定のプロパティを必要としますが、結果をしたい場合は

SharedDocuments.countByAuthorAndReceiver(user, receiver) 

答えて

0

ページネーションの投影では、投影ブロックの最後のフィールドのみが返されるバグがあります。現在のgrails 2.1.5では、このバグが修正されています。ここに報告されているバグはありますか?http://jira.grails.org/browse/GRAILS-9644

0

はあなただけcountBy *を使用することができませんでした。


def sharedDocumentsInstanceList = SharedDocuments.createCriteria().list(params){ 
    eq("receiver.id",session.uid) 
    projections{ 
     groupProperty "author" 
     count "id",'mycount' 

    } 
    order('mycount','desc') 
    maxResults(params.max) 
} 
0

のように -

+0

私の結果セットに関係なく、カウントされたその他の情報はありません。あなたが私に与えたコードのsharedDocumentsInstanceListを印刷すると '[2、]'という出力が生成されます – Sap

+0

私はちょっと同じことをやっていますが、名前付きのクエリでmaxResultsを使わないとうまく動作します。 author.idだけで作者をグループ化するとうまくいくはずです –

関連する問題