2011-08-31 3 views
1

Au moment où je reçois les meilleurs scores pour mon application Android du datastore comme suit:Interrogation de GAE datastore des numérations

 Query query = pm.newQuery(PlayerPersistentData.class); 
    query.setOrdering("rating desc"); 
    query.setRange(0, 25); 

Cependant, je voudrais également commander les résultats par le comte d'un colonne secondaire:

Par exemple Dans SQL normal, il serait quelque chose comme ceci:

select PlayerPersistentData.*, count(achievements) as achievements_count 
from PlayerPersistentData 
order by rating desc, achievements_count desc 

Réalisations est défini dans le datastore comme suit

@Persistent 
private Set<Integer> achievements; 

Est-ce possible en utilisant le datastore GAE? Et si oui, comment dois-je créer ma requête?

Merci à l'avance

Répondre

1

Vous devez dénormaliser: stocker le nombre comme un champ distinct de votre entité, et requête sur cette.

3

Vous pouvez utiliser la méthode méthode addSort pour objet de votre requête comme ceci:

query.addSort("rating", SortDirection.DESCENDING); 
query.addSort("achievements", SortDirection.DESCENDING); 
+0

Salut, je peux donner un tourbillon, mais les réalisations sont en fait un ensemble. Désolé, j'aurais dû inclure cela dans le texte original. @Persistent privé Set réalisations; –

+0

Dans ce cas, j'utiliserais une requête préparée, je parcourirais chaque résultat et j'obtiendrais le fichier achievement.count. voir le premier bloc de code. http://code.google.com/appengine/docs/java/datastore/queries.html Il y a probablement plus de moyens, mais mes connaissances sont également limitées. – Rohan