La valeur du count ds 1 group by : somme

Fermé
razily Messages postés 250 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 4 décembre 2013 - 15 juin 2010 à 11:45
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 - 15 juin 2010 à 22:34
Bonjour,
je ne sais pas si je dois résumer le sujet comme suit face à mon problème ; on me demande selon une base access qui gère les clients selon le contrat(police) qu'ils ont fait auprès des sociétés d'assurance selon l'état de ce contrat (en cours ou résilié ..)
j'arrive à créer un formulaire adéquate et un fichier qui traite la partie requête et afficher correctement les résultats ; après c'est là que vient le problème mais voilà dans le cahier des charges : on me demande à partir du résultat de faire un bilan selon la compagnie c'est à dire connaître par exemple (si on choisit résilié) le nombre de contrat résilié chez AGF , pareil pour AXA

voici le fichier avec la requête en question j'ai juste mis le bout du code :

/* 
 * le resultat après avoir fourni les donnéess dans le fichier rechercheAvancDate.php
 * on recupere les parametres
 */

      $etat = ($_GET['etat']);

    $jour = $_GET['jour1'];
     $mois = $_GET['mois1'];
      $annee = $_GET['annee1'];

      $jour2 = $_GET['jour2'];
     $mois2 = $_GET['mois2'];
      $annee2 = $_GET['annee2'];

 //connection au serveur:
    $cnx = odbc_connect( "DSN_carann", "root", "" ) or die("Impossible de se connecter à la bas de donn&eacutee") ;

    // $sql = "SELECT * FROM Police where Dateeffet = #$recherhe# ";


    // requête pour les police actifs basé sur la date effet

     $sql = "SELECT NumPol, IDCabinet ,Codeclient,Denomination,Dateeffet,Typedepolice,CodeCompagnie , Codeetatpolice  FROM PoliceClientphp where Dateeffet between  #$recherhe#  and  #$limite#
    AND Codeetatpolice = $etat    GROUP BY CodeCompagnie,Codeetatpolice,Typedepolice,IDCabinet,Codeclient,Denomination,Dateeffet,NumPol";


    echo  "<table border=\"1\">";
    echo "<thead>";
       echo " <tr>";
           echo " <th>Numéro</th>";
            echo "<th>Dénomination</th>";
            echo "<th>date effet</th>";
            echo "<th>Type police</th>";
            echo "<th>Compagnie</th>";
            echo "<th>Etat police</th>";
            echo "<th>Détails </th>";
       echo " </tr>";
    echo "</thead>";
    echo "<tbody>";


            $requete = odbc_do($cnx, $sql) ;


            // affichage des données

   

            while($result=odbc_fetch_object($requete))

      {



        echo "<tr>";
            echo "<td>";

              echo  $result->IDCabinet;

           echo " </td>";
           echo " <td>";

               echo $result->Denomination ;

            echo "</td>";
           echo " <td>";



                  $dateeffet=(string)($result->Dateeffet);
                   datefr($dateeffet);

           echo " </td>";
            echo "<td>";

             if(isset ($result->Typedepolice)){


                  foreach ($policetype as $val=>$donnee){
                switch ($result->Typedepolice){



                        case $val :

                           echo  $donnee;
                         break ;



                }

                 //echo 'Type de police'.$result->Typedepolice."<br/>";
            }

            }
              

            echo "</td>";
            echo "<td>";

             if(isset ($result->CodeCompagnie)){

                 foreach ($compgagnie as $val1 =>$donnee1){

                     switch ($result->CodeCompagnie){
                         case $val1:

                               echo $donnee1;

                         break ;

                     }
                 }

             }

              


            echo "</td>";










ce qui m'intéresse c'est la partie requête et la manière de pouvoir représenter et faire un état de bilan selon la compagnie
je pensais mettre count pour compter les compagnies mais y a des 1 partout à chaque ligne pour une même compagnie



  $sql = "SELECT NumPol, IDCabinet ,Codeclient,Denomination,Dateeffet,Typedepolice,CodeCompagnie , Codeetatpolice,count(CodeCompagnie) as bilan  FROM PoliceClientphp where Dateeffet between  #$recherhe#  and  #$limite#
    AND Codeetatpolice = $etat    GROUP BY CodeCompagnie,Codeetatpolice,Typedepolice,IDCabinet,Codeclient,Denomination,Dateeffet,NumPol";
.
.
.
.
// et dans le tableau d'affichage j'ai mis çà 

<td >

      echo $result->bilan ;
</td>




merci d'avance pour vos suggestions

4 réponses

Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
15 juin 2010 à 11:59
Là tu as sélectionné des attributs (NumPol, IDCabinet ,Codeclient, ...) en plus du count(). Je ne sais pas ce que donne le résultat d'une telle requête. Faudrait voir la doc du SGBD.

En tout cas, tu peux faire une seconde requête où tu ne sélectionne QUE le count() ou d'autres valeurs calculées :
SELECT Count(DISTINCT CodeCompanie) FROM PoliceClientphp


Ceci calcule le nombre de compagnies différentes (d'où le DISTINCT) dans la table PoliceClientphp. Tu peux éventuellement rajouter une condition avec un WHERE si tu ne veux compter que celles qui vérifies cette condition.
0
razily Messages postés 250 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 4 décembre 2013 2
15 juin 2010 à 16:58
peut être c'est possible aussi de faire cette méthode pour chaque nom de compagnie
0
razily Messages postés 250 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 4 décembre 2013 2
15 juin 2010 à 14:57
Salut ;

en fait le problème ici c'est de savoir combien de contrat résilié chez une compagnie particulière ; à vrai le nombre d'occurrence du nom de la compagnie lors du résultat de la requête
0
razily Messages postés 250 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 4 décembre 2013 2
Modifié par razily le 15/06/2010 à 15:11
en fait je cherche une solution , et face à ce code j'aimerai vous demander s'il est possible de mettre une variable dans un tableau associatif car l'idée c'est de comparer le nom de compagnie , et si c'est égal on incrémente la valeur associée :


<?php 


$compagnie = array ("AGF"=>0,"Allianz"=>0); 

 $cnx = odbc_connect( "DSN_personnes", "root", "" ) or die("Impossible de se connecter à la bas de donn&eacutee") ; 
  $sql = "SELECT * FROM [perso nnes] where nom like 'kim' "; 
   
   
  

$requete = odbc_do($cnx, $sql) ; 



  
   
  
    //affichage des données: 
    while( $result = odbc_fetch_object( $requete ) ) 
    { 
   
 // if(empty($result)) 
  { 
  
       echo $result->nom." ".$result->prenom." <br>"; 
        
         foreach($compagnie as $val =>$donnee) 
         { 
     
    // ici on pourra mettre que si  
    // si AGF alors on incrémente $stop 
    $donnee++; 
     
   } 
        
        } 
    //    else 
        { 
    
  //  echo 'aucun kim dans la base '."<br />"; 
  } 
     

  } 
   
  foreach($compagnie as $val =>$donnee) 
  { 
   echo $val.'corespond '.$donnee;  
      } 






mais çà m'affiche tout le temps 0

pareil même si on fait


$compagnie = array ("AGF"=>$top=0,"Allianz"=>$stop1=0);
0
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
15 juin 2010 à 18:42
Bah là tu ne mets jamais à jour le tableau.

Il faut bien qu'à un moment tu le fasses !

A la place de l'incrémentation de la variable $donnees :
$compagnie[$val]++;
0
razily Messages postés 250 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 4 décembre 2013 2
15 juin 2010 à 21:37
Salut ;
mais $val correspond ici au nom de la compagnie agf .. axa etc ..
comment peut-on l'incrémenter ??
0
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
15 juin 2010 à 22:34
Ca s'incrémente pas, c'est une chaîne ! Mais je comprends rien à ton code.

Déjà tu t'es trompé de condition (empty($result) au lieu de !empty($result))

Ensuite si tu veux incrémenter la valeur du tableau c'est pas $donnees++; mais $compagnie[$val]++; parce que $donnees est seulement une copie de la véritable valeur $compagnie[$val] du tableau . Donc si tu fais juste $donnees++; tu modifies la copie mais tu ne mets pas à jour le tableau.

Mais bien entendu si tu fais uniquement ça, toutes les valeurs tu tableaux seront incrémentées. Il faut que tu ajoutes ta fameuse condition "ici on pourra mettre que si AGF alors on ..."
0