2010-07-07 3 views
1

J'ai une base de données qui stocke le rang d'un élément. Le rang est une valeur absolue qui sera correcte si tous les éléments sont pris en compte.Comment puis-je compter le nombre de lignes avant une certaine ligne dans sqlite?

Si je seulement besoin d'un sous-ensemble soit quatre de ces éléments qu'il me donne quelque chose comme

Rank  RowId in the whole Table 
--------------- 
4   114 
8   71 
70  16 
83  7 

J'ai besoin maintenant un int spécifiant que le rang dans le sous-ensemble où le rang maximum est le nombre d'éléments dans le sous-ensemble dans mon exemple 1,2,3,4.

Existe-t-il un moyen d'y parvenir dans ma requête sqlite? J'ai seulement besoin d'un des rangs dans mon activité. J'ai pensé à classer les résultats de la requête par rang et ensuite obtenir la position de l'élément que je veux classer à ce moment-là. Mais comment pourrais-je y parvenir avec sqlite?

J'ai essayé de créer une table temporaire et insérez le sous-ensemble dans comme ceci:

CREATE TABLE rang (ID); INSERT INTO position SELECT ID parmi les éléments WHERE ITEM_ID = 3 ORDER BY POSITION; SELECT RowID du rang WHERE ID = 9; DROP TABLE rang;

Cela fonctionne dans le Gestionnaire SQLite et renvoie le nombre correct. Mais si je le fais dans Android en échoue disant qu'il n'y a pas de rang de table lors de la compilation requête

07-07 13:35:46.150: ERROR/AndroidRuntime(2047): Caused by: android.database.sqlite.SQLiteException: no such table: rank: , while compiling: SELECT RowID from rank WHERE ID = 9 
+0

Pourriez-vous s'il vous plaît poster votre schéma, les valeurs d'échantillon, et le résultat attendu que vous voulez voir. – Pentium10

Répondre

1

EDIT: d'accord avec la seule façon @ Matt que je suis en mesure de le faire est d'utiliser la température approche de la table.

Pour ce que ça vaut la peine, voici à quoi il ressemble ...

create temp table if not exists <temptable>(Id integer primary key, rank); 
insert into temptable(rank) select <column> from <table>; 
select * from temptable; 

EDIT: En fait qui retourne l'ID associé à la ligne qui est séquentielle pas vous obtiendrez pas toujours 1,2, 3,4 ... Je vais devoir penser à autre chose. Pardon.

Je ne sais pas si j'ai compris votre question. Vous voulez essentiellement cela?

Id  Value 
--------------- 
1   4 
2   8 
3   70 
4   83 

Donc vous voulez ajouter une pseudo-colonne comme ID, peu importe ce que contient votre sous-ensemble?

Si c'est exact cela devrait le faire ...

SELECT RowId, <other columns>.... FROM <table> WHERE <where> 

Toutes mes excuses si je l'ai mal compris.

+0

RowId me donne l'ID de la ligne dans le tableau entier pas dans le sous-ensemble que je reçois de la table. – Janusz

1

Vous pouvez générer votre requête (classée par rang) dans une table temporaire avec un ID d'incrémentation automatique.

+0

J'ai créé une table temporaire et j'y ai inséré quelque chose mais si je lis de la table j'obtiens une erreur que la table n'existe pas cela fonctionne très bien dans sqlite explorer mais pas sur l'émulateur – Janusz

+0

Est ce le problème lorsque vous essayez de faire ' sélectionnez * de tenttable'? –

+0

oui l'écriture fonctionne mais la lecture ne fonctionne pas – Janusz

-1

Si vous avez besoin de lire une seule ligne d'une sous-requête vous pouvez toujours exécuter une limite sur elle, en fournissant le décalage de nombre d'enregistrements à sauter d'abord, et combien à retourner

donc si vous Vous voulez obtenir la 25e ligne que vous dites pour passer 24, et retourner 1

+0

Mais cela ne me donnera pas la position de la rangée dans mon sous-ensemble ... Avez-vous lu ma question? C'est peut-être un peu difficile à comprendre, mais je ne pense pas que ce soit une réponse à ma question. – Janusz

+0

25 minutes, j'ai demandé plus d'informations, s'il vous plaît leur fournir. Que voulez-vous dire par «J'ai pensé à classer les résultats de la requête par rang et ensuite obtenir la position de l'élément que je veux classer à ce moment-là. ' – Pentium10

Questions connexes