Im Folgenden sind meine beiden Klassen
class Users {
String E-Mail-Adresse
String Passwort
// String Dateiname
String Vorname
String Nachname
Date DatumErstellt
Date ZuletztAktualisiert
}
und
class SharedDocuments {
Users Autor
Users Empfänger
Dokumente Datei
static constraints = {
}
}
Ich möchte eine Abfrage ähnlich wie diese durchführen, ich möchte im Wesentlichen eine Liste aller Benutzer zusammen mit der Anzahl der von ihnen verfassten Dokumente erhalten
SELECT autor_id, COUNT(SharedDocuments.id )FROM SharedDocuments
INNER JOIN users ON autor_id = users.id
GROUP BY autor_id
Das ist, was ich bisher habe
def sharedDocumentsInstanceList = SharedDocuments.createCriteria().list(params){
createAlias("autor","a")
eq("empfänger.id",session.uid)
projections{
groupProperty "autor"
count "id",'meineanzahl'
}
order('meineanzahl','desc')
maxResults(params.max)
}
Ich habe das zu 90 % funktionierend, wenn ich count
oder countDistinct
weglasse, erhalte ich eine Liste von verschiedenen Autoren, aber was ich möchte, sind Autoren zusammen mit der Anzahl der Dokumente. Wenn ich also diese Klausel count oder countDistinct zu diesen Kriterien hinzufüge, erhalte ich einfach ein Array von long!! wie [2,3,4] was ich will ist [[autor1,2],[autor2,3] ...] Wie kann ich das erreichen? Ich habe bereits Grails: Projektion auf mehreren Tabellen?, Grails Kriterien Projektionen - Zeilenanzahl abrufen, Grails groupProperty und order. Wie funktioniert es?, aber keine der Antworten scheint mein Problem zu lösen!