Je veux créer un Cursor
, qui plus tard, je vais passer par CursorAdapter
à AutoCompleteTextView
pour les suggestions d'auto-complétion. Le problème est que mon instruction SQL doit sélectionner 2 ensembles de résultats différents à partir de la même table, juste triés par des critères différents. En même temps, ces ensembles de résultats ne doivent pas se chevaucher - sinon, j'aurais plusieurs suggestions identiques. Sur MySQL, ce serait assez facile:SQLite sur Android: Union avec des limites alternatives
(SELECT field3 FROM table ORDER BY field1 ASC LIMIT 5)
UNION
(SELECT field3 FROM table ORDER BY field2 DESC LIMIT 10)
LIMIT 10
Dans ce cas, j'aurais toujours jusqu'à 10 valeurs uniques. Sur SQLite, malheureusement, ce n'est pas le cas - je ne peux pas avoir de limites sur des sélections particulières, juste sur l'ensemble des résultats, ce qui fait que UNION n'est pas utile pour ce cas ...
Pour résoudre ce problème Nous avons pensé à faire 2 requêtes séparément: itérer Cursor
depuis la 1ère requête et placer les valeurs dans Array
, puis parcourir Cursor
à partir de la 2ème requête et également placer les valeurs dans le même tableau tout en vérifiant et en ignorant les valeurs déjà existantes dans Array
pour éviter les doublons. Ensuite, utilisez ArrayAdapter
pour transmettre les valeurs à AutoCompleteTextView
.
Théoriquement, cela fonctionnerait - mais ce que je n'aime pas que tout devient plus complexe et beaucoup plus de code à écrire pour résoudre une telle tâche simple ...
Est-il peut-être une meilleure et plus facile à faire il?
Bonne idée! Mais SQLite ne permet pas non plus d'utiliser 'ORDER BY' dans les instructions multi-select ni:' Erreur SQL: la clause ORDER BY devrait venir après UNION pas avant ' – Laimoncijus