[RESOLU] Requête sql automatique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Requête sql automatique

Re: Requête sql automatique

par [Compte supprime] » 14 janv. 2015, 17:55

En attendant, j'ai mis le bout de code en pratique.

Il fonctionne, j'ai juste enlevé cette ligne :
$now->modify( '+1 year' );//+1 an à la date actuelle
Sinon, il m'ajoute 2016.

Merci !

Re: Requête sql automatique

par [Compte supprime] » 14 janv. 2015, 09:55

Bonjour,

Merci pour vos réponses !

Avec ton code yann18, je me demandais si il n'était pas plus simple de lancer une première requête qui me donne le MIN et le MAX des années disponibles dans CP_ANALYSE.
Et ensuite, avec cet intervalle, je gère la boucle pour créer la variable $sum et lancer la 2ème requête ?

Merci.

Re: Requête sql automatique

par yann18 » 13 janv. 2015, 23:17

tu peux construire ta requête dynamiquement en itérant sur les années en partant de 2007 à l'année courante.

$sum='';
$origin = new DateTime('2007-01-13');

$now= new DateTime();//date actuelle
$now->modify( '+1 year' );//+1 an à la date actuelle
$interval = new DateInterval('P1Y');
$daterange = new DatePeriod($origin, $interval ,$now);

foreach($daterange as $date){
$currentYear=$date->format('Y');

$sum.=",SUM(CASE WHEN YEAR(date_cpa) = $currentYear THEN compt_nb ELSE 0 END) AS 'compt_$currentYear'";
}
   $query="SELECT lieu $sum  FROM CP_ANALYSE, LIEUX WHERE CP_ANALYSE.id_li";


Je souhaiterais qu'elle détecte si la table CP_ANALYSE possède une ligne en 2015, on peut le résoudre en SQL ou je dois passer par du PHP ?
si la ligne 2015 n'est pas présente, alors le total pour 2015 sera 0(zéro) ce qui est logique par rapport à ta requête.

Re: Requête sql automatique

par Mazarini » 13 janv. 2015, 21:49

SELECT lieu,YEAR(date_cpa),sum(compt_nb)
                    FROM CP_ANALYSE, LIEUX
                    WHERE CP_ANALYSE.id_lieu=LIEUX.id_lieu
                    GROUP BY LIEUX.id_lieu,YEAR(date_cpa);
Et gérer les ruptures sur le lieu pour l'affichage.

Re: Requête sql automatique

par tof73 » 13 janv. 2015, 18:38

tu peux passer par du php pour construire la chaine de la requete sql avec une boucle de 2007 à date('Y')

Requête sql automatique

par [Compte supprime] » 13 janv. 2015, 16:19

Bonjour,

J'utilise cette requête qui fonctionne :
SELECT lieu,
                    SUM(CASE WHEN YEAR(date_cpa) = 2007 THEN compt_nb ELSE 0 END) AS "compt_2007",
                    SUM(CASE WHEN YEAR(date_cpa) = 2008 THEN compt_nb ELSE 0 END) AS "compt_2008",
                    SUM(CASE WHEN YEAR(date_cpa) = 2009 THEN compt_nb ELSE 0 END) AS "compt_2009",
                    SUM(CASE WHEN YEAR(date_cpa) = 2010 THEN compt_nb ELSE 0 END) AS "compt_2010",
                    SUM(CASE WHEN YEAR(date_cpa) = 2011 THEN compt_nb ELSE 0 END) AS "compt_2011",
                    SUM(CASE WHEN YEAR(date_cpa) = 2012 THEN compt_nb ELSE 0 END) AS "compt_2012",
                    SUM(CASE WHEN YEAR(date_cpa) = 2013 THEN compt_nb ELSE 0 END) AS "compt_2013",
                    SUM(CASE WHEN YEAR(date_cpa) = 2014 THEN compt_nb ELSE 0 END) AS "compt_2014"
                    FROM CP_ANALYSE, LIEUX
                    WHERE CP_ANALYSE.id_lieu=LIEUX.id_lieu
                    GROUP BY LIEUX.id_lieu;
Son problème, depuis janvier, elle n'est plus suffisante, logique ... Je pourrais tout simplement ajouter une ligne mais je souhaitais savoir si il n'y avait pas moyen de rendre tout ça automatique.
Je souhaiterais qu'elle détecte si la table CP_ANALYSE possède une ligne en 2015, on peut le résoudre en SQL ou je dois passer par du PHP ?

Merci ! ;-)