nombre total d'enregistrement nombre d'enregistrement avec une valeur

Mammouth du PHP | 693 Messages

28 août 2007, 15:17

Bonjour, j'aimerai savoir si c'est possible d'avoir le nombre total d'enregistrement et le nombre d'enregistrement corespondant à une entré en une seul requète ?

POur avoir le total, c'est facile

Code : Tout sélectionner

SELECT count(*),compagnie,bataillon FROM membre GROUP BY bataillon,compagnie
Mais maintenant, j'aimerai que dans la même requete, j'ai le nombre d'enregistrement avec 'actif' dans la colonne état pour chaque association compagnie/bataillon

Voici la structure de ma table :

Code : Tout sélectionner

CREATE TABLE `membre` ( `bataillon` varchar(20) collate latin1_general_ci NOT NULL, `compagnie` varchar(20) collate latin1_general_ci NOT NULL, `etat` varchar(30) collate latin1_general_ci NOT NULL default 'actif', PRIMARY KEY (`login`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
PS désolé pour mon titre pas très compréhensible, mais je voyais pas comment faire pour être plus clair...

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

28 août 2007, 21:27

Si ta version de MySQL le supporte, tu pourrais utiliser des tables dérivées

Code : Tout sélectionner

SELECT t1.bataillon, t1.compagnie, t1.total, t2.total_actif FROM ( SELECT bataillon, compagnie, COUNT(*) AS total FROM membre GROUP BY bataillon, compagnie ) AS t1 LEFT JOIN ( SELECT bataillon, compagnie, COUNT(*) AS total_actif FROM membre WHERE etat = 'actif' GROUP BY bataillon, compagnie ) AS t2 USING (bataillon, companie)
Il y a probablement des formes plus performantes selon la distribution de tes données, mais ça devrait aller comme ça. Pour info, USING c'est comme un ON qui fait l'égalité entre les champs de même nom dans les deux tables.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2007, 23:55

Sinon, je n'ai pas la moindre idée de ce que cela peut valloir en terme de perf, donc à essayer à l'occasion : une fonction SUM() sur un case/when qui retournerait 1 pour un enregistrement qui correspond et 0 sinon.

On peut ainsi avoir plusieurs compteurs dans une seule requête :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 693 Messages

29 août 2007, 09:36

Merci Hubert, ca marche parfaitement. Question perf, je vais pas beaucoup chercher vu qu'il y aura grand max une centaine d'enregistrement et une vingtaine de personne qui pourront y accéder.