Page 1 sur 1

statistiques

Posté : 25 juil. 2014, 12:04
par moimeme30
Bonjour à tous

De nouveau des soucis de requête pour des statistiques couplées à un graphique.
Une photo parlera mieux que moi, donc voici ce que j'ai et voici ce que je cherche à avoir:
requete actuelle:
SELECT COUNT( produit ) quantite, produit, YEAR( date_vente ) annee
FROM contacts
WHERE produit <>  ''
AND vente =1
GROUP BY produit, annee
ORDER BY annee
Image

Quelqu'un a une idée svp?

Re: statistiques

Posté : 25 juil. 2014, 21:57
par yann18
pour que le champ date_vente soit croisé dynamiquement c-a-d que ses ses valeurs(2013,2014,...) se transforment en tête de colonne il faut utiliser une structure de contrôle mysql comme CASE (ou IF).Pour faire simple le résultat('2010','2011',...) du CASE représente dorénavant l'en-tête de colonne:
SELECT produit ,
COUNT(CASE WHEN YEAR(date_vente) = '2010' THEN 1 ELSE NULL END) '2010' ,
COUNT(CASE WHEN YEAR(date_vente) = '2011' THEN 1 ELSE NULL END) '2011' ,
COUNT(CASE WHEN YEAR(date_vente) = '2012' THEN 1 ELSE NULL END) '2012' ,
COUNT(CASE WHEN YEAR(date_vente) = '2013' THEN 1 ELSE NULL END) '2013' ,
 FROM contacts WHERE produit <> '' 
AND vente =1 GROUP BY produit ORDER BY YEAR(date_f) 
Pour ne pas avoir à fixer les années en dur, comme dans l'exemple précédent, tu peux générer les années depuis une année prise comme origine de tes ventes jusqu'à l'année actuelle.
<?php
$now = date('Y'); //année actuelle
$annees = range(2010, $now );//génère les années comprises entre 2010 et l'année actuelle
foreach ( $annees as $annee ) {
  echo $annee,'<br>';
}
?>

en parcourant le tableau des années ($annees), on doit pouvoir construire dynamiquement la requête avant de l'exécuter.
$now = date('Y'); //année actuelle
$annees = range(2010, $now );//génère les années comprises entre 2010 et l'année actuelle
$total_par_an='';

foreach ( $annees as $annee ) {
   $total_par_an .=",COUNT(CASE WHEN YEAR(date_vente) = '$annee'  THEN 1 ELSE NULL END) '$annee' ";
}

$sql="SELECT produit $total_par_an 
      FROM contacts 
      WHERE produit <>  ''
      AND vente =1
      GROUP BY produit
      ORDER BY YEAR(date_f)
";
//affichage de a requête pour la tester dans phpmyadmin
echo "sql = ", $sql,'<br>';



Re: statistiques

Posté : 26 juil. 2014, 20:21
par moimeme30
Super Yann, une fois de plus tu me sauves, je te remercie. Bon WE et surement à bientot :)

Re: [RESOLU] statistiques

Posté : 26 juil. 2014, 21:09
par moimeme30
Une derniere chose sur laquelle je galere.

Actuellement j'ai ceci pour afficher mon tableau
<table class="tabl_graph">
	<thead>
			<tr>
<th></th><?php foreach ( $annees as $annee ){ ?><th><?php echo $annee; ?></th><?php } ?>
			</tr>
	</thead>

	<tbody>
			<?php foreach ( $ventes as $annee_v ){ ?>
		<tr>
			<td><?php echo $annee_v['produit']; ?></td>
			<td><?php echo $annee_v['2011'];?></td>
			<td><?php echo $annee_v['2012'];?></td>
			<td><?php echo $annee_v['2013'];?></td>
			<td><?php echo $annee_v['2014'];?></td>
		</tr>
		   <?php } ?>
	</tbody>
</table>
Mais j'aimerai que les colonnes soient générés dynamiquement plutot que de devoir ecrire echo $annee_v['2011'] echo $annee_v['2012'] etc....

Re: statistiques

Posté : 27 juil. 2014, 00:28
par Elie
                        <td><?php echo $annee_v['2011'];?></td>
                        <td><?php echo $annee_v['2012'];?></td>
                        <td><?php echo $annee_v['2013'];?></td>
                        <td><?php echo $annee_v['2014'];?></td>
devient
<?php foreach ( $annees as $annee ) {
 echo '                       <td>'.$annee_v[$annee].'</td>'."\n";
} ?>

Re: statistiques

Posté : 27 juil. 2014, 02:31
par moimeme30
merci Elie, c'est juste ce qu'il me manquait pour aller me coucher. je te remercie