[reglé] Plusieurs requete COUNT ?

Plusieurs requete COUNT ? [reglé] - PHP - Programmation

Marsh Posté le 31-05-2010 à 17:22:24    

Hello,
 
je cherche à afficher plusieurs résultat de COUNT. Mais je ne vois pas du tout comment.
 
Ci-dessous, j'affiche si VALID = 1 mais j'aimerais aussi pouvoir afficher le resultat si VALID = 2 en même temps, à part reconstruire plusieurs requete, je vois pas.
 

Code :
  1. $req = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE valid ='1' AND operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%' " );
  2.       if ($req)
  3.       {
  4.          $res = mysql_fetch_array($req);
  5. echo "<tr><td>Pour la période  : 31$madate</td>";
  6.     echo '<td>L\' ',$operateur,' à traité</td>';
  7.     echo '<td> '.$res["Count"].' fiche(s)</td></tr>';
  8.       }


 
Merci d'avance.


Message édité par fscalda le 02-06-2010 à 09:32:11
Reply

Marsh Posté le 31-05-2010 à 17:22:24   

Reply

Marsh Posté le 31-05-2010 à 17:23:56    

tu enleves valid ='1' et tu fais GROUP BY valid, rajoute les champs dans ton select aussi, essaye d'hab ta requetes dans phpmyadmin


Message édité par stealth35 le 31-05-2010 à 17:24:40
Reply

Marsh Posté le 31-05-2010 à 17:26:19    

Pfiouuu, toujours aussi rapide stealth35  :lol: Merci je vais testé ça.
 
Allez, je me complique un peu, et si je veux aussi compter le nombre de reponse à un champ nommé question1 ?

Reply

Marsh Posté le 31-05-2010 à 17:29:42    

hum, je pense qu'a ma derniere question, il va falloir que je construise une varaible non ? Dans le genre $quest01 = oui .... rahhh, fin de journée....

Reply

Marsh Posté le 31-05-2010 à 17:33:32    

j'ai du mal a voir, comment est ta base, et quelle est le rendu final que tu veux faire ?

Reply

Marsh Posté le 31-05-2010 à 17:52:37    

En fait, j'ai des listbox pour choisir l'operateur, le mois voire le jour et j'aimerais afficher des stats par mois/jour dedans qui serait :
combien de valid 1
combien de valid 2
combien de valid = '1' AND quest01 = 'oui' AND quest02 = 'non' AND quest05 in ('oui3mois','oui6mois','ouiannee')
 
Et comme je ne connais pas du tout la fonction COUNT  et ses possiblités, je seche ...
 
Normalement, je devrais créer un tableau avec chaque jour, mais bon, j'essaie déjà de le faire pour un jour unique pour comprendre les possibilités de COUNT;


Message édité par fscalda le 31-05-2010 à 17:54:21
Reply

Marsh Posté le 31-05-2010 à 18:46:18    

tu peux faire des sous requête SELECT dans les COUNT

Reply

Marsh Posté le 31-05-2010 à 18:59:34    

je tentais actuellement ça :  

Code :
  1. select sum(case when valid = 0 then 1 else 0 end) pasok, sum(case when valid = 1 then 1 else 0 end) ok from prospect


 
Ca commence à venir, je vais me pauser, et je retente la suite demain.  
 
Par contre, pour créer des sous requetes, est ce que je peux ecrire comme cela :
 

Code :
  1. $req01 = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%'  " );
  2. $req02 = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%'  " );
  3. $req03 = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%'  " );

Reply

Marsh Posté le 01-06-2010 à 09:28:01    

Bon, j'avance, mais c'est comment dire, un foutoir !!!
 

Code :
  1. $req = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%'  AND valid ='1' " );
  2.       if ($req)
  3.       {
  4.          $res = mysql_fetch_array($req);
  5. echo "<tr><td> 31$madate</td>";
  6.     echo '<td> ',$operateur,' </td>';
  7.     echo '<td> '.$res["Count"].' </td>';
  8.       }
  9.  
  10. // total pas valide 2  
  11. $req = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%' AND valid ='2' " );
  12.       if ($req)
  13.       {
  14.          $res = mysql_fetch_array($req);
  15.     echo '<td> '.$res["Count"].' </td>';
  16.       }
  17. // total   
  18.    $req = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%' AND valid = '1' AND quest01 = 'oui' AND quest02 = 'oui' AND quest03 = 'oui' " );
  19.       if ($req)
  20.       {
  21.          $res = mysql_fetch_array($req);
  22.     echo '<td> '.$res["Count"].' </td>';
  23.       }


 
Il doit y avoir moyen de simplifier, mais je ne vois pas encore comment.

Reply

Marsh Posté le 01-06-2010 à 09:54:29    

le probleme c'est que y'a pas de logique, mais tu pourrais faire version barbare

 
Code :
  1. SELECT
  2. (SELECT COUNT(*) AS Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%'  AND valid ='1') AS champs1,
  3. (SELECT COUNT(*) AS Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%' AND valid ='2' ) AS champs2,
  4. (SELECT COUNT(*) AS Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%' AND valid = '1' AND quest01 = 'oui' AND quest02 = 'oui' AND quest03 = 'oui' ) AS champs3
 


sinon au niveaux de la date ca serai mieux de faire des comparaison avec le type DATE et pour ton valid si c'est du type INT pas besoin de quote ;)

  


Message édité par stealth35 le 01-06-2010 à 09:56:03
Reply

Marsh Posté le 01-06-2010 à 09:54:29   

Reply

Marsh Posté le 01-06-2010 à 10:01:30    

Merci, je vais tester.
Pour mon champ valid, il est de style tinyint, ça marche ?.
 
Dans tout les cas, merci beaucoup !

Reply

Marsh Posté le 01-06-2010 à 10:04:36    

ouai c'est pareil ;),  pour les paramètre COUNT le *, mais plutôt la clé primaire dedans

Reply

Marsh Posté le 01-06-2010 à 10:27:44    

Avec ton code, ça fonctionne nickel et je m'y retrouve.
 

Code :
  1. $requete="SELECT
  2.       (SELECT COUNT(*) AS Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%'  AND valid ='1') AS champs1,
  3.       (SELECT COUNT(*) AS Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%' AND valid ='2' ) AS champs2,
  4.       (SELECT COUNT(*) AS Count FROM `prospect` WHERE operateur = '$operateur' AND date LIKE '%$annee-%$mois-31%' AND valid = '1' AND quest01 = 'oui' AND quest02 = 'oui' AND quest03 = 'oui' ) AS champs3" ;
  5. $resultat = mysql_query($requete);
  6. $ligne = mysql_fetch_object($resultat);
  7. echo $ligne->CHAMPS1;      
  8.  
  9.    echo $ligne->champs1;
  10.   echo $ligne->champs2 ;
  11.   echo $ligne->champs3 ;


 
Juste une dernier chose, je n'arrive pas à mettre le resultat de champs1 dans un <td>, je ne vois pas ou on insére la balise, j'ai tenté :
 

Code :
  1. echo '<td> echo $ligne->champs1</td>';


 

Reply

Marsh Posté le 01-06-2010 à 10:30:56    

J'ai rien dit, un simple  
 

Code :
  1. echo "<tr><td> $ligne->champs1 </td>";

fonctionne  :D  
 
Je rajoute la clé primaire ID, merci beaucoup !!!!!

Reply

Marsh Posté le 01-06-2010 à 10:33:25    

t'es sur de ca : %$annee-%$mois-31%,   tout les mois non pas un 31 , t u veux juste récupérer le dernier jour d'un mois suivant une année ?


Message édité par stealth35 le 01-06-2010 à 10:38:01
Reply

Marsh Posté le 01-06-2010 à 11:57:49    

Oui,oui  :D  en fait, ma listbox envoi ma variable annee + mois, et je récupere le 31. J'ai fait pareil pour le 30 etc, j'aurais du faire un boucle mais bon, je me suis pris la tête avec les dates.
Je sais qu'une grosse requête vaut mieux que 50 petites ...


Message édité par fscalda le 01-06-2010 à 12:05:20
Reply

Marsh Posté le 01-06-2010 à 13:30:20    

ta une fonction LAST_DAY en mysql, ta juste a tester avec $annee-$mois-01   (le 1er jour du mois etant toujours le 1 contrairement au dernier jour)

Reply

Marsh Posté le 02-06-2010 à 09:31:26    

J'ai regardé, mais c'est confu... il aurait fallu que je fasse une boucle pour afficher tout les jours du mois dans un tableau. Mais bon, la ça marche, et en plus, ça ne sera utiliser normalement qu'une fois par mois...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed