IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

requete sur x derniers mois [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut requete sur x derniers mois
    Bonjour,

    Je cherche à faire une requete sql qui me retourne le montant saisi pour chaque mois pour les x derniers mois en prenant le mois en cours. Mon problème c'est que la sa me retourne tout les mois que j'ai dans ma base

    Voici la requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function obtenirReqRecapDerniersMois($unIdMembre, $unMois) {
        $unMois = getMoisPrecedent($unMois);
        $requete = "select LigneFrais.mois AS mois, SUM(LigneFrais.quantite * Frais.montant) as montantFrais from LigneFrais
    inner join FicheFrais on LigneFrais.idMembre = ficheFrais.idMembre
    inner join Frais on Frais.id = LigneFrais.idFrais
    where FicheFrais.idMembre='" . $unIdMembre. "'
        AND FicheFrais.mois = '".$unMois."'
    group by FicheFrais.mois, LigneFrais.mois";
     
        return $requete;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    fonction getMoisPrecedent:
    function getMoisPrecedent($mois){
        $numAnnee =substr($mois,0,4);
        $numMois =substr($mois,4,2);
        if($numMois=="01"){
            $numMois = "12";
            $numAnnee--;
        }
        else{
            $numMois--;
        }
        if(strlen($numMois)==1){
            $numMois="0".$numMois;
        }
        else
            $numMois= $numMois;
        return $numAnnee.$numMois;
    }
    Voilà comment est interprêter ma requete:

    select LigneFrais.mois AS mois, SUM(LigneFrais.quantite * frais.montant) as montantFrais from LigneFrais inner join FicheFrais on LigneFrais.idMembre = ficheFrais.idMembre inner join Frais on Frais.id = LigneFrais.idFrais where FicheFrais.idMembre='1' AND FicheFrais.mois = '201308' group by FicheFrais.mois, LigneFrais.mois

    Ma requete prendre juste le mois d'août alors qu'elle devrait les X derniers mois en partant de octobre
    mon champs "mois" est de type char(6): aaaamm

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    C'est ballot d'avoir des champs mois de type char

    il faut donc un requete type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...AND CAST(FicheFrais.mois AS int) >= 201305
    la il retourne de 201305 a 201310
    $moi= ( !== ) ? : ;

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    C ne marche pas totalement:
    donc j'ai mis sa:
    AND CAST(FicheFrais.mois AS char) >=".$unMois."
    AND CAST(LigneFrais.mois AS char) >=".$unMois."
    et voilà se que sa m'affiche:
    201308 3151.38
    201308 1099890.00
    201308 1646.76
    201309 3151.38
    201309 1099890.00
    201309 1646.76
    201310 3151.38
    201310 1099890.00
    201310 1646.76

    le problème c'est que la variable $mois est à 201308 au lieu d'être à 201305
    Je ne souhait pas mettre la condition sur le mois en dur car sinon tout les mois je vais devoir changer. Je veux que sa se face automatiquement
    Par exemple, pour trois mois, je doit avoir
    201308 3151.38
    201309 1099890.00
    201310 1646.76

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Pour ce qui est du nombre de résultat à afficher c bon, ici j'en ai trois car sa me prendre qu'à partir de août.
    Par contre je n'arrive pas à afficher les résultat pour les six mois

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter un filtre de temps sur le dernier mois
    Par Nahed bs dans le forum SSAS
    Réponses: 1
    Dernier message: 26/07/2012, 10h23
  2. [VxiR2] Filtre dynamique sur 12 dernier mois
    Par malik1820 dans le forum Webi
    Réponses: 16
    Dernier message: 14/08/2009, 17h08
  3. Requete sur date année+mois et ID
    Par zugolin dans le forum Requêtes
    Réponses: 16
    Dernier message: 12/08/2008, 23h06
  4. Réponses: 4
    Dernier message: 23/06/2006, 17h35
  5. Filtre sur les données des 3 derniers mois?
    Par Arkalys dans le forum Access
    Réponses: 2
    Dernier message: 21/10/2005, 09h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo