Lors du développement d’un site ou d’une application il est fort probable de devoir compter certaines informations avec COUNT(). Par exemple un site web communautaire peut compter le nombre de nouveaux messages et le nombre de notifications lorsque l’utilisateur se connecte. Cet article explique comment et pourquoi il faut effectuer une seule requête pour tous les COUNT().
Intérêt
Effectuer plusieurs appels dans une base de données est relativement long. Dans la mesure du possible il faut réduire les appels. Dès lors, pour de meilleurs performances il convient d’éviter d’effectuer ces 3 requêtes suscessivements :
SELECT COUNT(*) FROM table1; SELECT COUNT(*) FROM table2; SELECT COUNT(*) FROM table2 WHERE is_valid = 1;
Syntaxe pour grouper plusieurs requêtes en une seule
Les 3 requêtes présentées ci-dessous peuvent être regrouper en 1 seule en utilisant la syntaxe suivante:
SELECT (SELECT COUNT(*) FROM table1) as count1, (SELECT COUNT(*) FROM table2) as count2, (SELECT COUNT(*) FROM table2 WHERE is_valid = 1) as count3
Cette requête va retourner un enregistrement contenant les valeurs count1, count2 et count3.
Utilité
Voici une petite liste non-exhaustive de toutes les fonctionnalités qui peuvent être comptées au sein de cette unique requête SQL :
- Compter le nombre de membre inscrit
- Compter le nombre de membres connectés
- Compter le nombre de visiteurs connectés
- Compter les nouveaux messages non-lu d’un membre
- Compter le nombre de notification pour un membre
Aller plus loin
Pour aller un peu plus et réduire la charge serveur il est aussi possible de mettre en cache ces valeurs. Mais cela ne reflète plus de SQL mais du reste de l’application.
Le regroupement no fonctionne pas chez moi il demande la clause FROM pour le 1er select
j’ai trouvé ce dont j’ai besoin, juste un remerciement sincère et chaleureux!
merci !!!
Merci beaucoup. J’ai tenté un bon nombre de syntaxes qui ne donnaient pas le résultat espéré, la vôtre a fonctionné immédiatement :-)