Page 1 sur 1

Plusieurs COUNT dans une meme requete ?

Posté : 22 déc. 2011, 15:08
par spedgreg
Déjà une image pour mieux comprendre :wink:

Image

entre chaque parenthèse, il doit avoir le nombre d'annonce postée pour Clio, Mégane, etc........

Comment organiser ma requête??

Dois-je faire une requête pour chaque entrée "Clio, Mégane,...."

Ou dans une seule requête faire plusieurs COUNT avec une boucle while?

<?php
$query=$db->prepare('SELECT COUNT(*) AS nb_clio_competition
				   FROM annonce								   	
                                   WHERE gamme = \'clio compétition\'                                 						   
				 ');   							   
                $query->execute();
                
while ($donnees = $query->fetch(PDO::FETCH_ASSOC))
{
?>

<table>
   <tr>
       <td><img src="/jmc-competition/image/vehicules-competition.png" alt="véhicules de compétition" title="véhicules de compétition" /></td>
       <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/jmc-competition/annonce/categories/vehicules-competitions/clio.php">clio</a>&nbsp;&nbsp;(<?php echo $donnees['nb_clio_competition']?>)</td>
	   <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/annonce/categories/vehicules-competitions/megane.php">mégane</a>&nbsp;&nbsp;()</td>
	   <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/annonce/categories/vehicules-competitions/r5turbo.php">R5 turbo</a>&nbsp;&nbsp;()</td>
	   <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/annonce/categories/vehicules-competitions/gtturbo.php">GT turbo</a>&nbsp;&nbsp;()</td>
	   <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/annonce/categories/vehicules-competitions/autrescompe.php">autres</a>&nbsp;&nbsp;()</td>    
   </tr>  
</table>
<?php
}
?>

Re: Plusieurs COUNT dans une meme requete ?

Posté : 22 déc. 2011, 15:38
par moogli
salut,

test
select count(*) as nbCaisse, gamme from  annonce  group by gamme;
dans une console SQL ;)


@+

Re: Plusieurs COUNT dans une meme requete ?

Posté : 22 déc. 2011, 16:09
par spedgreg
j'ai testé dans une console SQL :

Image


je voudrais que entre les parenthèse a coté de Mégane il y est le nombre total d'annonce et pour les autre aussi...

Là vu qu'il y a 2 annonces:

1 pour clio compétition donc: clio (1)

et vu qu'il y a une annonce mégane compétition il doit avoir mégane(1)

Re: Plusieurs COUNT dans une meme requete ?

Posté : 22 déc. 2011, 17:51
par moogli
je voudrais que entre les parenthèse a coté de Mégane il y est le nombre total d'annonce et pour les autre aussi...
et ?

tu a déjà un exemple de code dans ton 1er message à adapter avec ma requête !

@+

Re: Plusieurs COUNT dans une meme requete ?

Posté : 22 déc. 2011, 18:46
par spedgreg
Je t'avoue :? ... que je nage je n'arrive pas à adapter ma requête avec la tienne, j'ai essayé plein de combinaison :(

Re: Plusieurs COUNT dans une meme requete ?

Posté : 22 déc. 2011, 20:28
par moogli

Re: Plusieurs COUNT dans une meme requete ?

Posté : 22 déc. 2011, 22:57
par spedgreg
j'ai lus en entier le lien mais ça ma pas aidé #-o il parle de jointure mais moi c'est pas une jointure que je veux faire!

Peut être je me suis mal exprimé lors de mon explication :(

L'utilisateur à créé 3 annonces différentes, voila la table annonce:

Image

comme tu peux le voir dans mon champs "gamme" j'ai différente entrée "clio compétition" "mégane compétition" "GT turbo compétition"

et je veux que entre parenthèse il y est donc le nombre total d'annonce "clio compétition" et le total d'annonce "mégane compétition" etc .....

comme sur cette page

Image

et je n'arrive pas organisé ma requête SQL , j'avais fais ça :
<?php
$query=$db->prepare('SELECT COUNT(*) AS nb_clio_competition
                                   FROM annonce                                                                
                                   WHERE gamme = \'clio compétition\'                                                                             
                                 ');                                                       
                $query->execute();
               
$donnees = $query->fetch(PDO::FETCH_ASSOC);
?>

<table>
   <tr>
           
           <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/annonce/categories/vehicules-competitions/clio.php">clio</a>&nbsp;&nbsp;(<?php echo $donnees['nb_clio_competition']?>)</td>
           <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/annonce/categories/vehicules-competitions/megane.php">mégane</a>&nbsp;&nbsp;()</td>
           <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/annonce/categories/vehicules-competitions/r5turbo.php">R5 turbo</a>&nbsp;&nbsp;()</td>
           <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/annonce/categories/vehicules-competitions/gtturbo.php">GT turbo</a>&nbsp;&nbsp;()</td>
           <td>&nbsp;&nbsp;&nbsp;&nbsp;<a class="accueil" href="/annonce/categories/vehicules-competitions/autrescompe.php">autres</a>&nbsp;&nbsp;()</td>    
   </tr>  
</table>
mais là ça liste que "clio compétition" logique vu ma requête, mais comment faire pour avoir aussi le nombre total d'annonce pour "mégane compétition" etc ..... le tout réuni dans une seule requête?

il y a aussi la solution d’écrire une requête différente pour chaque catégorie de véhicules, pièces, etc mais ça fais trop de requête sur une seule page :(

Re: Plusieurs COUNT dans une meme requete ?

Posté : 23 déc. 2011, 09:48
par moogli
1/ la requête je te l'ai donné elle fonctionne (ton second message le prouve ;) ) !
2/ Il faut que ton code affiche son contenu, c'est la base, si tu a su faire le code le code que tu indique cela ne pose pas de problème.
si tu ne sais pas faire lit le dernier cours que je t'ai indiqué (sur lephpfacile).
il te suffit d'afficher chaque ligne retourné par la requête (qui te fournit le nombre et la gamme).

D'ailleurs ta base semble ma faite la gamme devrait être une table a part histoire de ne pas mettre le brin dans tous cela (le fait de voir l'id user m'indique qu'a priori tu sais le faire).

@+

Re: Plusieurs COUNT dans une meme requete ?

Posté : 23 déc. 2011, 18:07
par spedgreg
Sincèrement je lis sur différents sites des tutos sur les requêtes avec COUNT, GROUP BY..... J’essaye plein de combinaison et je n'arrive vraiment pas ! :(

donc c'est ma requête qui est pas bonne ou je ne sais pas comment afficher le contenu ou les deux !

J'ai dans ma base de donnée dans mon champ "gamme" j'ai 4 entrées (1clio..., 2 Mégane..., 1 R5 turbo....), Je veux que entre parenthèse il y est le total d'annonce:
- Clio (1)
-Mégane(2)
-R5 turbo (1)

Ce que j'ai codé:
$query=$db->prepare('SELECT COUNT(*) AS total
                                    FROM annonce                                  
				 GROUP BY gamme						   
				');  							   
                $query->execute();				
$donnees = $query->fetch(PDO::FETCH_ASSOC);

           <p>Clio: (<?php echo $donnees['total']?>)</p>
	   <p>Mégane: (<?php echo $donnees['total']?>)</p>
	   <p>R5 turbo: (<?php echo $donnees['total']?>)</p>

et ça me donne:

Clio: (1)
Mégane: (1)
R5 turbo: (1)


La seule solution pour faire ce que je veux c'est écrire différente requête comme ça:
$query=$db->prepare('SELECT COUNT(*) AS total_clio
                                    FROM annonce                                  
				 WHERE gamme= \'clio compétition\'						   
				');  							   
                $query->execute();				
$donnees = $query->fetch(PDO::FETCH_ASSOC);

                                   <p>Clio: (<?php echo $donnees['total_clio']?>)</p>

$query=$db->prepare('SELECT COUNT(*) AS total_megane
                                    FROM annonce                                  
				 WHERE gamme= \'mégane compétition\'						   
				');  							   
                $query->execute();				
$donnees = $query->fetch(PDO::FETCH_ASSOC);


	                           <p>Mégane(<?php echo $donnees['total_megane']?>)</p>

$query=$db->prepare('SELECT COUNT(*) AS total_r
                                    FROM annonce                                  
				 WHERE gamme= \'R5 turbo compétition\'						   
				');  							   
                $query->execute();				
$donnees = $query->fetch(PDO::FETCH_ASSOC);


	                             <p>R5 turbo(<?php echo $donnees['total_r']?>)</p>


Re: Plusieurs COUNT dans une meme requete ?

Posté : 24 déc. 2011, 14:20
par spedgreg
Personne pour m'aider :( :(

Re: Plusieurs COUNT dans une meme requete ?

Posté : 24 déc. 2011, 15:33
par Ryle
Il te faut utiliser la requête de moogli et exploiter ce qu'elle te retourne :
SELECT count(*) AS nbCaisse, gamme FROM  annonce  GROUP BY gamme;
Cette requête va compter tous les enregistrements que tu as dans ta table annonce et les grouper par gamme. Si cela te semble visuellement plus logique tu peux inverser l'ordre des colonnes retournées :
SELECT gamme, count(*) AS nbCaisse FROM  annonce  GROUP BY gamme;
Cette requête va te retourner les enregistrements sous la forme :
- gamme = nom de la gamme en base
- nbCaisse = nombre d'annonce dans cette gamme

Il te suffit alors de parcourir chaque enregistrement retourné par la requête pour afficher les résultats sous la forme " gamme (nbCaisse) " et obtenir le résultat que tu souhaites :)

Re: Plusieurs COUNT dans une meme requete ?

Posté : 24 déc. 2011, 20:22
par spedgreg
Comme ça ?
$query=$db->prepare('SELECT gamme, COUNT(*) AS total
                                 FROM annonce  						   
				 GROUP BY gamme						   
				 ');  							   
                $query->execute();				
while( $donnees = $query->fetch(PDO::FETCH_ASSOC) )

echo '<p>'.$donnees['gamme'].' '.$donnees['total'].'</p>'

Mais comment l’afficher avec mes liens ? grr je rame complétement sur ce coup là :( :( :(
<?php
$query=$db->prepare('SELECT gamme, COUNT(*) AS total
                                     FROM annonce  						   
				     GROUP BY gamme						   
				  ');  							   
                            $query->execute();				
while( $donnees = $query->fetch(PDO::FETCH_ASSOC) )

echo '<p>'.$donnees['gamme'].' '.$donnees['total'].'</p>'						
?>
<table>
   <tr>

           <td><a href="/annonce/categories/vehicules-competitions/clio.php">clio</a>------()</td>
	   <td><a href="/annonce/categories/vehicules-competitions/megane.php">mégane</a>------()</td>
	   <td><a href="/annonce/categories/vehicules-competitions/r5turbo.php">R5 turbo</a>------()</td>
	   <td><a href="/annonce/categories/vehicules-competitions/gtturbo.php">GT turbo</a>------()</td>
	   <td><a href="/annonce/categories/vehicules-competitions/autrescompe.php">autres</a>------()</td>
    
   </tr>  
</table>



Re: Plusieurs COUNT dans une meme requete ?

Posté : 24 déc. 2011, 21:05
par moogli
heu tu le fait exprès ? :/

tu gère dynamiquement les liens (d'ailleurs les catégories doivent l'être aussi sinon c'est vite la merde :) )
<?php
$query=$db->prepare('SELECT gamme, COUNT(*) AS total
                                      FROM annonce                                                  
                                      GROUP BY gamme                                                
                                   ');                                                      
                             $query->execute();                          
?>
 <table>
    <tr>
<?php
while( $donnees = $query->fetch(PDO::FETCH_ASSOC) ){
echo '<td><a href="/annonce/categories/vehicules-competitions/clio.php">'.$donnees['gamme'].'</a>------('.$donnees['total'].')</td>';
} ?>
    </tr>  
 </table>
par exemple

après bien sur si tu a une table avec les catégories et une seule page pour afficher les détails d'une catégorie et un url rewriting du tonner tu peux faire des liens comme tu l'indique.

@+