Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête dynamique complète de la base de données des chambres

Vous ne pouvez pas utiliser de variables de liaison (paramètres) pour référencer des colonnes dans la clause ORDER BY. Cependant, vous pouvez utiliser la variable de liaison dans une expression comme celle-ci :

@Query("select * from coin ORDER BY
CASE :order
WHEN 'percent_change_24h' THEN percent_change_24h
WHEN 'other_column_name' THEN other_column_name
END asc limit :numberOfCoins")
fun getAllTop(order: String, numberOfCoins: Int): Flowable<List<CoinDB>>

Vous devrez ajouter une clause WHEN distincte à l'instruction CASE pour chaque colonne/expression que vous souhaitez trier, et vous devrez ou voudrez peut-être ajouter une clause ELSE pour les situations où la variable de liaison :order ne correspond à aucune des vos cas standards.

La restriction sur les variables liées est également vraie pour la clause where et la projection (liste de sélection). La variable de liaison a ses propres valeurs dans vos exemples, soit String ou Int pour :order et :numberOfCoins respectivement.