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 :

Requête Sql pour avoir les mois coulant


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Par défaut Requête Sql pour avoir les mois coulant
    Bonjours à tous,

    L'intitulé n'est pas très clair donc je vais tenté de m'expliquer ici.
    Actuellement j'ai une requête SQL qui me retourne des résultats pour un mois et seulement un mois.
    Voici la requête:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT( ID ) AS total_ouvert,
    COUNT( solvedate ) AS total_resolu
    FROM glpi_excel
    WHERE YEAR( date ) =2012 AND MONTH( date ) =6

    J'aimerais si possible quand je choisis le mois que ça me retourne les résultats des 2 derniers moi également.
    Merci d'avance à ce qui pourront m'aider.

    Cordialement,

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    salut ; pour faire simple tu peut utilisé un between au lieux de faire une requête avec un paramètre calculé , aussi sa donne aussi un interval large d'analyse dans le temps.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    J'utiliserais DATE_SUB pour trouver la borne inférieure.
    et j'utiliserais plutôt une requête du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE Date_champ >= DATE_SUB($date_post, INTERVAL 2 MONTH) 
    AND Date_champ = $date_post
    avec comme sous-entendu si comme dans ton exemple tu ne fourni que l'année et le mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date_post = $_POST['annee'].'-'.$_POST['mois'].'-01';
    ou sinon pour la petite histoire tu peux créer $date_post plus savamment en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date = date_create($_POST['annee'].'-'.$_POST['mois']);
    $date_post = date_format($date, 'Y-m-d');

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Citation Envoyé par redoran Voir le message
    salut ; pour faire simple tu peut utilisé un between au lieux de faire une requête avec un paramètre calculé
    ça change rien, faudra bien calculer à un moment ou a un autre le paramètre inférieur de la borne du beetween puisque la seule valeur fournie est la borne supérieure
    Sinon les beetween ça peut être assez ambigu. On sait mieux ou l'on va en utilisant les opérateurs classique '<', '<=', '>', '>='.

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salut ; ABCIWEB merci pour la méthode d'utilisation de DATE_SUB.
    Pourquoi BETWEEN?

    le développeur peut proposé des solutions surtout dans des cas pareilles afin de données plus de flexibilité et sa fait un calcule de moins dans la requête , parce que l'optimiseur du SGBDR enfin de compte va utilisé un between , si je ne me trompe pas.

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Citation Envoyé par ABCIWEB
    WHERE Date_champ >= DATE_SUB($date_post, INTERVAL 2 MONTH)
    AND Date_champ = $date_post
    Pourquoi le AND ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Par défaut
    Merci pour les réponses de tout le monde.

    J'ai essayé la méthode d'ABCIWEB dans ma base sql en utilisant cette formule:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT( ID ) AS total_ouvert, COUNT( solvedate ) AS total_resolu
    FROM glpi_excel
    WHERE date >= DATE_SUB( YEAR( date ) =2012
    AND MONTH( date ) =6, INTERVAL 2 MONTH )

    J'ai comme résultat trouvé 0.
    J'ai essayé de la mettre directement dans ma pa php pour sortir le graphique et le résultat est zéro toujours...
    J'ai essayé de bidouiller et de chercher pour voir ou était mon erreur mais je n'ai rien trouvé.
    Merci à ceux qui pourront m'aider.

    Cordialement,

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,
    Pourquoi le AND ?
    pour avoir une borne supérieure.

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Citation Envoyé par redoran Voir le message
    Salut ; ABCIWEB merci pour la méthode d'utilisation de DATE_SUB.
    Pourquoi BETWEEN?
    Pourquoi le bettween peut être ambigu ? Parce que selon les cas les bornes sont inclues ou ne le sont pas.

  10. #10
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Pourquoi le bettween peut être ambigu ? Parce que selon les cas les bornes sont inclues ou ne le sont pas.
    salut,

    elles sont toujours inclus et oui between étant un opérateur il utilise donc les éventuels index et quand tu utilises des formules, ça peut éventuellement être plus clair et compact...

    quand tu utilises un nom de colonne qui est un mot clé sql tu dois l'encadrer avec ``

    enfin il faut mettre les colonnes affichées qui ne sont pas dans les fonctions de groupage, l'erreur peut venir de là

    ici faut en effet faire un mixte des 2:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE `date` between CURRENT_DATE -INTERVAL 2 MONTH AND CURRENT_DATE
    GROUP BY YEAR(`date`),MONTH(`date`)
    ou encore:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where `date`>=concat(year(@d:=current_date - interval 2 month),'-',month(@d),'-01')
    GROUP BY YEAR(`date`),MONTH(`date`)
    ici, il vaudrait donc mieux former la date inférieure en php pour garantir l'utilisation d'un index sur la colonne `date`, ça devrait être plus rapide je pense

Discussions similaires

  1. [MySQL] Imbriquer deux requêtes sql pour avoir un seul résultat
    Par Alexcontact dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/05/2014, 15h56
  2. Réponses: 2
    Dernier message: 16/01/2013, 19h27
  3. requête SQl pour récupérer les noms des tables
    Par taher84 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/07/2010, 22h07
  4. requête sql pour recherche par mois
    Par mahboubi dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/01/2009, 09h05
  5. Requête SQL pour obtenir les intitulés des champs d'une table
    Par Zakapatul dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2008, 09h51

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