web-dev-qa-db-fra.com

Comment obtenir le nombre de lignes du résultat sélectionné depuis sqlite3?

Je veux obtenir le nombre de lignes sélectionnées ainsi que les données sélectionnées. À l'heure actuelle, je dois utiliser deux instructions SQL:

l'un est

select * from XXX where XXX;

l'autre est

select count(*) from XXX where XXX; 

Peut-il être réalisé avec une seule chaîne sql?

J'ai vérifié le code source de sqlite3, et j'ai trouvé la fonction de sqlite3_changes(). Mais la fonction n'est utile que lorsque la base de données est modifiée (après insert, delete or update).

Quelqu'un peut-il m'aider avec ce problème? Merci beaucoup!

34
user26404

essayez de cette façon

select (select count() from XXX) as count, * 
from XXX;
15

SQL ne peut pas mélanger les résultats sur une seule ligne (comptage) et sur plusieurs lignes (sélection des données dans vos tables). Il s'agit d'un problème courant avec le retour d'énormes quantités de données. Voici quelques conseils pour gérer cela:

  • Lisez les N premières lignes et dites à l'utilisateur "plus de N lignes disponibles". Pas très précis mais souvent assez bon. Si vous gardez le curseur ouvert, vous pouvez récupérer plus de données lorsque l'utilisateur touche le bas de la vue (Google Reader le fait)

  • Au lieu de sélectionner directement les données, copiez-les d'abord dans une table temporaire. L'instruction INSERT renverra le nombre de lignes copiées. Plus tard, vous pouvez utiliser les données de la table temporaire pour afficher les données. Vous pouvez ajouter un "numéro de ligne" à cette table temporaire pour simplifier la pagination.

  • Récupérez les données dans un thread d'arrière-plan. Cela permet à l'utilisateur d'utiliser votre application pendant que la grille ou le tableau de données se remplit de plus de données.

13
Aaron Digulla
select (select COUNT(0) 
            from xxx t1 
            where t1.b <= t2.b 
            ) as 'Row Number', b from xxx t2 ORDER BY b; 

essayez juste ceci .

2
FormatD

Vous pouvez les combiner en une seule déclaration:

select count(*), * from XXX where XXX

ou

select count(*) as MYCOUNT, * from XXX where XXX
1
dalle

Une fois que vous avez déjà le select * from XXX résultats, vous pouvez simplement trouver la longueur du tableau dans votre programme non?

0
Swaroop C H

Si tu utilises sqlite3_get_table au lieu de préparer/étape/finaliser, vous obtiendrez tous les résultats à la fois dans un tableau ("tableau des résultats"), y compris le nombre et le nom des colonnes et le nombre de lignes. Vous devez ensuite libérer le résultat avec sqlite3_free_table

0

Pour obtenir le nombre de titres uniques, vous devez passer la clause DISTINCT à la fonction COUNT comme l'instruction suivante:

SELECT
 COUNT(DISTINCT column_name)
FROM
 'table_name';

Source: http://www.sqlitetutorial.net/sqlite-count-function/

0