Page 1 sur 1

PHP/Nombre de SELECT (sum case) selon variables

Posté : 31 déc. 2013, 09:57
par [Compte supprime]
Bonjour,

Pour les besoins d'un outil que je développe, j'utilise la requête suivante :

Code : Tout sélectionner

// COMPTEUR NOIR ET BLANC $query = $bdd->prepare('SELECT lieu, SUM(CASE WHEN YEAR(date_cpa) = 2007 THEN compt_nb ELSE 0 END) AS "total_2007", SUM(CASE WHEN YEAR(date_cpa) = 2008 THEN compt_nb ELSE 0 END) AS "total_2008", SUM(CASE WHEN YEAR(date_cpa) = 2009 THEN compt_nb ELSE 0 END) AS "total_2009", SUM(CASE WHEN YEAR(date_cpa) = 2010 THEN compt_nb ELSE 0 END) AS "total_2010", SUM(CASE WHEN YEAR(date_cpa) = 2011 THEN compt_nb ELSE 0 END) AS "total_2011", SUM(CASE WHEN YEAR(date_cpa) = 2012 THEN compt_nb ELSE 0 END) AS "total_2012", SUM(CASE WHEN YEAR(date_cpa) = 2013 THEN compt_nb ELSE 0 END) AS "total_2013", SUM(CASE WHEN YEAR(date_cpa) = 2014 THEN compt_nb ELSE 0 END) AS "total_2014" FROM CP_ANALYSE, LIEUX WHERE CP_ANALYSE.id_lieu=LIEUX.id_lieu AND lieu = ? GROUP BY LIEUX.id_lieu'); $query->execute(array("$lieu")); $donnees = $query->fetch(); $query->closeCursor();
Tout ça fonctionne sans souci. Cette requête me renvoi le nombre de copies noir & blanc par année selon le lieu. Le lieu étant variable comme vous pouvez le voir.

Dans le but d'optimiser l'outil, je voudrais pouvoir sélectionner une plage d'années. J'ai déjà préparer la page pour sélectionner la date de début et de fin, par contre, est-ce que je peux au niveau de ma requête SQL rendre le nombre de SUM CASE variable selon mon choix ?

J'ai pensé à faire une boucle if, elseif mais je serais limiter au niveau du nombre d'année déjà connues et ça ne me paraît pas tellement optimisé...

Merci pour votre aide !

PS: J'ai hésité à mettre ça dans la partie SQL :-/

Re: PHP/Nombre de SELECT (sum case) selon variables

Posté : 31 déc. 2013, 12:09
par [Compte supprime]
Avec l'aide d'un autre forum, pour ceux que ça pourrait intéresser, la réponse :
// COMPTEUR NOIR ET BLANC
$query = $bdd->prepare('SELECT l.id_lieu, YEAR(date_cpa) annee, SUM(compt_nb) sommeCompte
FROM CP_ANALYSE cp
INNER JOIN LIEUX l ON cp.id_lieu = l.id_lieu
WHERE lieu = ?
AND YEAR(date_cpa) BETWEEN ? AND ?
GROUP BY l.id_lieu, YEAR(date_cpa)');
$query->execute(array("$lieu", "$dated", "$datef"));

while ($row = $query->fetch()) {
   $ydata[] = $row['sommeCompte'];
   $annee[] = $row['annee'];
}
$query->closeCursor();