utilisation d'une SUM de plusieurs COUNT

utilisation d'une SUM de plusieurs COUNT - SQL/NoSQL - Programmation

Marsh Posté le 23-05-2012 à 09:55:11    

Bonjour à tous,
Malgré de nombreuses lectures sur l'utilisation de la fonction SUM je ne parviens pas à utiliser ma variable afin d'afficher le résultats de la requète.
Pas très clair tout ça ...
J'effectue une requète SQL qui fait une SUM de plusieurs COUNT (comme indiqué dans le titre) et une variable AS est attribuée à la fin de la fonction.
J'aimerai afficher le résultat mais je sais pas comment faire ...
 
Voici le code que j'ai pour la requète :

Code :
  1. $requete = "SELECT SUM(nature) FROM(
  2.   SELECT *,  COUNT(nature) AS nbNature FROM `eanantes` GROUP BY nature UNION ALL
  3.   SELECT *,  COUNT(nature) AS nbNature FROM `earouen` GROUP BY nature UNION ALL
  4.   SELECT *,  COUNT(nature) AS nbNature FROM `ealille` GROUP BY nature UNION ALL
  5.   SELECT *,  COUNT(nature) AS nbNature FROM `ealondres` GROUP BY nature UNION ALL
  6.   SELECT *,  COUNT(nature) AS nbNature FROM `eanancy` GROUP BY nature ORDER BY nature)AS sommeNature";


 
 
Ensuite je voudrais afficher le résultats obtenu dans sommeNature dans un tableau en php du style :
 

Code :
  1. echo"<tr class=\"$trClasse\">
  2. <td>$data[nature]</td>
  3. <td>$sommeNature</td>
  4. </tr>";


 
Evidemment ceci ne marche pas
 
Pour le moment j'ai un tableau où j'ai plusieurs lignes avec plusieurs fois la même chose avec un résultat count différent et j'aimerai que la donnée qui se répète avec un résultat différent n'apparaisse qu'une fois avec la somme de tous les count. Je ne sais pas si c'est clair :/ en tout cas voici le code de ce que j'ai actuellement:
 

Code :
  1. $requete ="SELECT *,  COUNT(nature) AS nbNature FROM `eanantes` GROUP BY nature UNION ALL
  2.  SELECT *,  COUNT(nature) AS nbNature FROM `earouen` GROUP BY nature UNION ALL
  3.  SELECT *,  COUNT(nature) AS nbNature FROM `ealille` GROUP BY nature UNION ALL
  4.  SELECT *,  COUNT(nature) AS nbNature FROM `ealondres` GROUP BY nature UNION ALL
  5.  SELECT *,  COUNT(nature) AS nbNature FROM `eanancy` GROUP BY nature ORDER BY nature";//)AS sommeNature";
  6. $req = mysql_query($requete) or die(mysql_error());
  7. $i=0;
  8. while($data = mysql_fetch_assoc($req))
  9. {
  10. if($i%2==0)
  11. {   //affichage du tableau, fait appel au design "tab1" si le nombre i est pair
  12.  $trClasse="tab1";
  13. }
  14. else
  15. {
  16.  $trClasse="tab2";
  17. }
  18. echo"
  19. <tr class=\"$trClasse\">
  20.  <td>$data[nature]</td>
  21.  <td>$data[nbNature]</td>
  22. </tr>";
  23. $i=$i+1;
  24. }


Reply

Marsh Posté le 23-05-2012 à 09:55:11   

Reply

Marsh Posté le 23-05-2012 à 10:21:08    

C'est vraiment pas le truc à faire en SQL : tu as 5 requetes qui n'ont aucun rapport , pourquoi vouloir tout faire en une fois ?


---------------

Reply

Marsh Posté le 23-05-2012 à 10:39:07    

Ben je voudrais additionner les count où chaque "nature" à le même nom.
Par exemple si la nature (ici on parle de la nature d'un problème)
a été la communication 5 fois à rouen et 2 fois a nantes,  
je voudrais pouvoir afficher qu'elle a été la nature du problème 7 fois en tout.

Reply

Marsh Posté le 31-05-2012 à 09:39:14    

Hmmm vu le nombre hallucinante de solutions dois-je supposer qu'il n'y en à pas ? :/

Reply

Marsh Posté le 31-05-2012 à 09:40:34    

disons que tu as vrai problème de structure de base de données
pourquoi créer une table par ville, plutôt que d'ajouter une colonne ville dans ta table ?


---------------

Reply

Marsh Posté le 31-05-2012 à 16:28:31    

Oui j'ai bien compris le probème et je m'en étais rendu compte mais malheureusement il est "trop tard" pour tout rechanger, ça entrainerait beaucoup de modifications dans mes pages php et il y aurait le risque de nombreuses erreurs dans les pages actuellement en marche. Et je n'ai pas vraiment le temps de tout rechanger :/
C'est pour ça que j'espérais trouver une solution sur ce forum :s

Reply

Marsh Posté le 31-05-2012 à 19:56:19    

La requête

SELECT *,  COUNT(nature) AS nbNature FROM `eanantes` GROUP BY nature UNION ALL

renvoie une colonne nommée "nbNature", c'est celle-ci qu'il faut utiliser :

Code :
  1. $requete = "SELECT SUM(nbNature) FROM(
  2.   SELECT *,  COUNT(nature) AS nbNature FROM `eanantes` GROUP BY nature UNION ALL
  3.   SELECT *,  COUNT(nature) AS nbNature FROM `earouen` GROUP BY nature UNION ALL
  4.   SELECT *,  COUNT(nature) AS nbNature FROM `ealille` GROUP BY nature UNION ALL
  5.   SELECT *,  COUNT(nature) AS nbNature FROM `ealondres` GROUP BY nature UNION ALL
  6.   SELECT *,  COUNT(nature) AS nbNature FROM `eanancy` GROUP BY nature ORDER BY nature)AS sommeNature";


Message édité par mrbebert le 31-05-2012 à 19:57:01

---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 01-06-2012 à 11:37:36    

Oui je comprend le bien la chose à faire mais je ne vois pas comment afficher la variable nbNature obtenue afin de la mettre dans un tableau en php :/
 
En tout cas merci d'essayer de m'aider ^^'

Reply

Marsh Posté le 01-06-2012 à 13:25:32    

Comme n'importe quel résultat de requête :??:
 
$requete = "SELECT SUM(nbNature) sum_nature FROM( ...
...
$req = mysql_query($requete)
...
$data = mysql_fetch_assoc($req)
 
echo $data['sum_nature']


---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 01-06-2012 à 13:38:57    

Oui merci je ne sais pas pourquoi j'essayais de réutiliser sommeNature comme un idiot ...
Ca marche parfaitement maintenant.  
Merci beaucoup ! =)

Reply

Sujets relatifs:

Leave a Replay

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