GROUP BY sur plusieurs variables affiché en tableau

Eléphanteau du PHP | 11 Messages

05 oct. 2005, 13:13

Voilà, je suis sur l'ébauche de ma page de stats sur les joueurs de tennis.

Objectif
Afficher un tableau :
- en ligne : les joueurs
- en colonne : les types de tournoi
- dans le tableau : un count du nombre de victoires
- une colonne total qui sera la clef de tri décroissante du tableau

Mon code
$sql_palmares  = "SELECT vainqueur, type, count(nom) as palmares from tableaux GROUP BY vainqueur, type ORDER BY vainqueur"; 
$resultat_palmares = mysql_query($sql_palmares); 
?> 

<table> 
  <tr class="titretableau"> 
    <td class="titretableau" width="10%"><p align="center"><b>Joueur</b></td> 
    <td class="titretableau" width="10%"><p align="center"><b>Type</b></td>
    <td class="titretableau" width="20%"><p align="center"><b>Nb</b></td> 
  </tr> 
  
<?php 
while($data = mysql_fetch_array($resultat_palmares)) 
{ 
?> 
  <tr> 
    <td class="contenutableau"><?php echo($data['vainqueur']); ?></td>
    <td class="contenutableau"><?php echo($data['type']); ?></td>  
    <td class="contenutableau"><?php echo($data['palmares']); ?></td>
  </tr> 
<?php 
} 
?> 
</table>
Le problème
J'obtiens bien sûr une ligne par couple (vainqueur, type)
Federer Grand Chelem 6
Federer Masters Series 10

au lieu de

Federer 16 6 10

Qqun peut-il me mettre le pied à l'étrier ? Faut-il passer par plusieurs requêtes (une par type) ?? J'apprendrai bcp sur la gestion des tableaux grace à cet exemple.

Merci d'avance

Mammouth du PHP | 568 Messages

05 oct. 2005, 13:38

Si j'étais toi, je ferais une boucle sur tous les joueurs (donc sans le type) (tu en profites pour récupérer le total (COUNT())...

Dans cette boucle, tu créés une ligne et exécutes ta requête pour chaque joueur.

Ensuite, tu boucles sur le résultat de la seconde requête et créer autant de cellules que d'entrés... Dans la dernière cellule, le résultat de la 1ère requête...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphanteau du PHP | 11 Messages

08 oct. 2005, 17:25

Résolu, merci

Ci-dessous, mon code ==> si ça peut servir à d'autres
$sql_palmares  = "SELECT vainqueur, count(nom) as palmares from tableaux WHERE vainqueur != '-' and type in('Grand Chelem', 'Masters Series','WTA') GROUP BY vainqueur HAVING palmares>4 order by palmares desc";
$resultat_palmares = mysql_query($sql_palmares);
?> 

<table width="100%" border="1" cellpadding="2" cellspacing="0">
 <tbody class="contenutableau">

<tr> 
    <td class="titretableau" width="20%"><p align="center">Joueur</td>
    <td class="titretableau" width="20%"><p align="center">Nombre de victoires</td> 
    <td class="titretableau" width="20%"><p align="center">En Grand Chelem</td>
    <td class="titretableau" width="20%"><p align="center">En Masters Series</td> 
    <td class="titretableau" width="20%"><p align="center">En WTA > 1.000.000$</td> 
</tr> 

<?php 
/* on boucle sur chaque joueur*/
while($data = mysql_fetch_array($resultat_palmares)) 
{ 
/* on construit les requetes par type de tournoi*/
$sql_gc  = "SELECT count(nom) as palmaresgc from tableaux WHERE vainqueur = '".$data['vainqueur']."' and type='Grand Chelem' GROUP BY vainqueur";
$resultat_gc = mysql_query($sql_gc);
$data_gc = mysql_fetch_assoc($resultat_gc);
$sql_ms  = "SELECT count(nom) as palmaresms from tableaux WHERE vainqueur = '".$data['vainqueur']."' and type='Masters Series' GROUP BY vainqueur";
$resultat_ms = mysql_query($sql_ms);
$data_ms = mysql_fetch_assoc($resultat_ms);
$sql_wta  = "SELECT count(nom) as palmareswta from tableaux WHERE vainqueur = '".$data['vainqueur']."' and type='WTA' GROUP BY vainqueur";
$resultat_wta = mysql_query($sql_wta);
$data_wta = mysql_fetch_assoc($resultat_wta);

/* On affiche - si pas de victoire dans la catégorie choisie*/
$gc = ($data_gc['palmaresgc']>0) ? $data_gc['palmaresgc'] : '-' ;
$ms = ($data_ms['palmaresms']>0) ? $data_ms['palmaresms'] : '-' ;
$wta = ($data_wta['palmareswta']>0) ? $data_wta['palmareswta'] : '-' ;

/* on alimente chaque colonne avec les palmares calcules precedemment*/
?> 
<tr> 
    <td class="contenutableau"><?php echo($data['vainqueur']); ?></td>
    <td class="contenutableau"><p align="center"><?php echo ($data['palmares']); ?></td> 
    <td class="contenutableau"><p align="center"><?php echo $gc ; ?></td>
    <td class="contenutableau"><p align="center"><?php echo $ms ; ?></td> 
    <td class="contenutableau"><p align="center"><?php echo $wta ; ?></td> 
</tr> 
<?php 
} 
?>
</tbody>
   </table> 
Yavhé certainement plus simple mais je suis déjà vachement fier d'avoir codé cela tout seul :P