2017-05-01 2 views
1

J'ai une requête paramétrées qui vaCouchbase: (Java) sur requête paramétrées clause ORDER BY ne fonctionne pas

String stmt = "SELECT * FROM bucket ... ORDER BY $sortCategory DESC"; 

Alors je vais:

ParameterizedQuery query = ParameterizedQuery.parameterized(stmt, JsonObject.create().put("sortCategory", "dateUploaded")); 

Ce n'est pas le tri correctement. J'ai même imprimé query.statementParameters() et il imprime correctement mes paramètres. Cela ne fonctionnait que lorsque je faisais un hardcode ("ORDER BY dateUploaded DESC"). Je ne sais pas pourquoi c'est le cas.

Pourquoi cela ne fonctionne-t-il pas?

Répondre

0

Le problème se produit parce que la requête se traduit en quelque chose comme ceci:

SELECT * FROM bucket ... ORDER BY 'date' DESC; 

Ce qui est sans doute pas fait référence à la colonne date mais à la valeur « date ».

Vous pouvez essayer d'utiliser un index représentant la position de la colonne au lieu de spécifier le nom de la colonne.

String stmt = "SELECT date, column2, column3 FROM bucket ... ORDER BY $sortCategory DESC"; 

ParameterizedQuery query = ParameterizedQuery.parameterized(stmt, JsonObject.create().put("sortCategory", 1)); 
+0

Le champ en cours de tri est en fait nommé "dateUploaded". Désolé pour ça. Ce n'est pas grave parce que j'ai choisi d'autres domaines pour trier et ça ne fonctionnait toujours pas – mpmp