J'ai créé un fournisseur de contenu pour mon application. Pour simplifier, je vais utiliser un exemple. J'ai une table 'OrderDetails'.Comment GROUPER lorsque vous utilisez un fournisseur de contenu?
- J'ai une colonne pour l'ID de commande.
- J'ai une colonne pour la quantité des différents types de produits qui ont été achetés dans cet OrderId.
- J'ai un OrderDetailId qui est la clé primaire de la table.
Je veux écrire la requête: SELECT OrderID, sum(quantity) FROM OrderDetails GROUP BY OrderID
qui renverrait ceci:
Cependant, j'ai essayé d'insérer mon clause GROUP BY dans mon URI pour mon Content Provider mais cela ne fonctionnera pas, donc la requête résultante devient: SELECT OrderID, sum(quantity) FROM OrderDetails
qui renvoie ceci (la quantité entière de tout et le dernier OrderId):
Voici la méthode pour obtenir le curseur et il suffit d'imprimer le résultat que je viens de faire:
private void findQuantityByOrder(){
Uri uri = DatabaseContract.CONTENT_URI_ORDER_DETAILS;
String[] selection = new String[] {DatabaseContract.DatabaseOrderDetails.ORDER_ID,
"sum("+ DatabaseContract.DatabaseOrderDetails.QUANTITY + ")"
+"GROUP BY(" + DatabaseContract.DatabaseOrderDetails.ORDER_ID + ")"};
String projection = null;
String sortBy = null;
String[] args = null;
Cursor cursor = getContentResolver().query(
uri,
selection,
projection,
args,
sortBy);
for (int i = 0; i < cursor.getCount(); i ++) {
cursor.moveToPosition(i);
int orderID = cursor.getInt(cursor.getColumnIndex("orderID"));
int quantity = cursor.getInt(cursor.getColumnIndex("sum(quantity)"));
System.out.println("orderId: " + orderID + ". Quanitity: " + quantity);
}
}
Il n'imprime la totalité de la somme de toutes les commandes, le dernier ID qui était sur la table.
Je crois que GROUP BY a été supprimé et n'est plus supporté. Y a-t-il un autre moyen qui produira le même résultat?
Merci
qu'est-ce que vous voyez si vous produisez la variable nommée selection? –