SQLite – obtenir le nombre de lignes dans une firebase database

Je veux obtenir un certain nombre de lignes dans ma table en utilisant max(id) . Quand il retourne NULL – s’il n’y a pas de lignes dans la table – je veux retourner 0. Et quand il y a des lignes je veux retourner max(id) + 1 .

Mes lignes sont numérotées à partir de 0 et augmentées automatiquement.

Voici ma déclaration:

 SELECT CASE WHEN MAX(id) != NULL THEN (MAX(id) + 1) ELSE 0 END FROM words 

Mais ça me ramène toujours 0. Qu’est-ce que j’ai mal fait?

Si vous voulez utiliser le MAX (id) au lieu du nombre, après avoir lu les commentaires de Pax, le SQL suivant vous donnera ce que vous voulez

 SELECT COALESCE(MAX(id)+1, 0) FROM words 

Vous pouvez interroger le nombre réel de lignes avec

  SELECT Count (*) FROM tblName 

voir https://www.w3schools.com/sql/sql_count_avg_sum.asp

En SQL, NULL = NULL est faux, vous devez généralement utiliser IS NULL:

 SELECT CASE WHEN MAX(id) IS NULL THEN 0 ELSE (MAX(id) + 1) END FROM words 

Mais, si vous voulez le nombre de lignes, vous devez simplement utiliser count(id) car votre solution donnera 10 si vos lignes sont (0,1,3,5,9) où il devrait donner 5.

Si vous pouvez garantir que vous aurez toujours des identifiants allant de 0 à N, max (id) +1 peut être plus rapide en fonction de l’implémentation de l’index (il peut être plus rapide de traverser l’arborescence, en comptant).

Mais c’est très spécifique à l’implémentation et je vous déconseille de vous y fier, notamment parce qu’il verrouille vos performances à un SGBD spécifique.

Je ne sais pas si je comprends votre question, mais max (id) ne vous donnera pas le nombre de lignes du tout. Par exemple, si vous n’avez qu’une seule ligne avec id = 13 (supposons que vous avez supprimé les lignes précédentes), vous aurez max (id) = 13 mais le nombre de lignes est 1. La solution correcte (et la plus rapide) est d’utiliser compter(). BTW si vous vous demandez pourquoi il y a une écanvas, c’est parce que vous pouvez compter les lignes basées sur un critère.

J’ai le même problème si je comprends bien votre question, je veux connaître le dernier identifiant inséré après chaque performance d’insertion dans l’opération SQLite. J’ai essayé la déclaration suivante:

 select * from table_name order by id desc limit 1 

L’identifiant est la première colonne et la clé primaire de la table_name, l’instruction mentionnée me montre l’enregistrement avec l’id le plus grand.

Mais la prémisse est que vous n’avez jamais supprimé aucune ligne, donc les nombres d’id sont égaux aux nombres de lignes.

Extension de la réponse de VolkerK, pour rendre le code plus lisible, vous pouvez utiliser AS pour référencer le compte, exemple ci-dessous:

SELECT COUNT(*) AS c from profile

Cela facilite grandement la lecture dans certains frameworks, par exemple, j’utilise l’intégration Sqlite d’Exposant (React Native), et sans l’instruction AS, le code est plutôt moche.