Mysql
 sql >> Database >  >> RDS >> Mysql

Interrogazione dinamica completa del database della sala

Non è possibile utilizzare variabili di collegamento (parametri) per fare riferimento a colonne nella clausola ORDER BY. Tuttavia, puoi utilizzare la variabile bind in un'espressione in questo modo:

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

Dovrai aggiungere una clausola WHEN separata all'istruzione CASE per ogni colonna/espressione in base alla quale desideri ordinare e potresti aver bisogno o voler aggiungere una clausola ELSE per le situazioni in cui la variabile :order bind non corrisponde a nessuna delle i tuoi casi standard.

La restrizione sulle variabili bind vale anche per la clausola where e la proiezione (elenco di selezione). La variabile Bind ha i propri valori negli esempi String o Int rispettivamente per :order e :numberOfCoins.