sql >> Database >  >> RDS >> Mysql

Kamerdatabase volledige dynamische query

U kunt geen bindvariabelen (parameters) gebruiken om naar kolommen in de ORDER BY-component te verwijzen. U kunt de bindvariabele echter in een uitdrukking als volgt gebruiken:

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

U moet een afzonderlijke WHEN-component toevoegen aan de CASE-instructie voor elke kolom/expressie waarop u wilt sorteren, en u moet mogelijk een ELSE-component toevoegen voor de situaties waarin de :order bind-variabele niet overeenkomt met een van uw standaardkoffers.

De beperking op bindvariabelen geldt ook voor de waar-clausule en de projectie (selecteer lijst). Bindvariabelen hebben hun eigen waarden in uw voorbeelden String of Int voor respectievelijk :order en :numberOfCoins.



  1. MySQL selecteren voor na rij

  2. Kunnen wildcards worden gebruikt op tafelnamen voor een GRANT in MySQL

  3. Knex converteert stilletjes Postgres-tijdstempels met tijdzone en retourneert onjuiste tijd

  4. Globale query-time-out in MySQL 5.6