Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Vollständige dynamische Abfrage der Raumdatenbank

Sie können keine Bindevariablen (Parameter) verwenden, um auf Spalten in der ORDER BY-Klausel zu verweisen. Sie können die Bind-Variable jedoch in einem Ausdruck wie dem folgenden verwenden:

@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>>

Sie müssen der CASE-Anweisung für jede Spalte/jeden Ausdruck, nach der/dem Sie sortieren möchten, eine separate WHEN-Klausel hinzufügen, und Sie müssen oder möchten möglicherweise eine ELSE-Klausel für Situationen hinzufügen, in denen die Bindevariable :order mit keiner übereinstimmt Ihre Standardfälle.

Die Beschränkung auf Bind-Variablen gilt auch für die where-Klausel und die Projektion (Auswahlliste). Bind-Variablen haben in Ihren Beispielen ihre eigenen Werte, entweder String oder Int für :order bzw. :numberOfCoins.