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

Langage PHP Discussion :

Compter les id par mois dans une requête


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut Compter les id par mois dans une requête
    Bonjour,

    Je viens pour avoir un peut d'aide pour récupérer des champs dans ma base SQL, je souhaite compter tout les ID chaque mois et ceux depuis les 12 dernier mois.

    En faite j'aimerai récupérer toute les entrées MySql par mois depuis 1 an ?

    Les dates sont dans le format datetime : Y-m-d h:m:s, le champs s'appele "start"

    j'ai trouvé cette requete, mais j'ai l'impression que c'est pas la bonne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = "SELECT count(id) FROM matable WHERE MONTH(start) = MONTH(CURDATE()- INTERVAL '2' MONTH)  ";
    pouvez vous m'aider a réaliser le code, car moi je cale

    Merci pour vos lumières

    Cdt,

    Max

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Il te manque un groupement par mois déjà. Ensuite tu fais un interval 2 mois alors que tu veux sur une année.

    Petite info en passant : C'est plus rapide de compter les lignes que les colonnes, donc via COUNT(*).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    le 2 est pour dire que je veux relever les dates dans le mois en cours - 2, pour afficher les dates de decembre , c'est pas ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT count(id) FROM matable WHERE MONTH(start) = MONTH(CURDATE()- INTERVAL '2' MONTH)  ";

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    merci Mon problème c'est que je cherche la syntaxe de la requete, comment on fait les groupements ? et comment faire pour avoir les valeurs par mois ?

    cdt,

    MAx

  5. #5
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 597
    Points : 886
    Points
    886
    Par défaut
    Bonjour.
    Un peu de lecture à la source : http://dev.mysql.com/doc/refman/5.0/...functions.html

    Ce devrait donner quelque chose du genre
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(*) AS nb,MONTH(madate) AS monmois FROM matable WHERE CURDATE() > DATE_ADD(start, INTERVAL 12 MONTH) GROUP BY monmois
    Participez vous aussi !
    Message utile
    Discussion résolue

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    merci pour ta réponse ypcman, mais je n'arrive toujours pas a faire marcher cette requete

    voila mon code, si je souhaite compter tout les tickets qui ont été créé au mois de janvier 2014 ? et ne rigolé pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $query = "SELECT count(*) AS nb,MONTH(01) AS '01' FROM $tbl_call WHERE CURDATE() > DATE_ADD(start, INTERVAL 1 MONTH) GROUP BY '01'";
    $result = mysql_query($query) or die (mysql_error());
    $resultat=mysql_fetch_row($result);
    echo $resultat[0];
    c'est quoi le groupe, et quel format est attendu ?

    Cdt
    Max

  7. #7
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Je n'en suis pas certain, mais je ne crois pas qu'un nombre passe pour créer un alias. Essaye avec janvier au lieu de '01' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT count(*) AS nb,MONTH(01) AS janvier FROM $tbl_call WHERE CURDATE() > DATE_ADD(start, INTERVAL 1 MONTH) GROUP BY janvier";
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    alors apparemment je cumule tout les tickets les janvier de toute les années, janv 2013 et janvier 2014, donc je pense que l'on ai pas loin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT count(*) AS nb,MONTH(start) AS janvier FROM $tbl_call WHERE CURDATE() > DATE_ADD(start, INTERVAL 1 MONTH) GROUP BY janvier";
    je pense qu'il faut rajouter une année quelque part non ?

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    pour chaque année, cette requête va grouper les données par mois
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = "SELECT count(*) AS nb, YEAR(start) AS an, MONTH(start) AS mois FROM $tbl_call WHERE CURDATE() > DATE_ADD(start, INTERVAL 12 MONTH) GROUP BY an, mois";

    si cette requête ne correspond pas au résultat que t'attends faudrait alors être un peu plus explicite quant à ton problème et au résultat attendu

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    merci armel18,

    Non j'ai pas le résultat attendu, car j’attends "09" tickets pour le mois de janvier 2014, et la requete m'affiche "1"

    Pour résumer, je suis en train de creer des statistiques, et je souhaite afficher tout les tickets creer par mois :

    exemple :
    Janvier 2014 = 12
    Dec 2013 = 8
    Nov 2013 = 16
    Oct 2013 = 11

    les valeurs serons dans un graphique sous forme de courbe, et je fait une requête pour chaque numero de mois, et pour les 12 derniers mois, je veux donc creer 12 requetes, une pour chaque valeur

    cdt,

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT count(*) AS nb, YEAR(start) AS an, MONTH(start) AS mois FROM $tbl_call GROUP BY an, mois";
    Enlève la clause les "12 derniers mois".sinon la requête correspond bien au résultat attendu

    pour rappel la colonne date de la table doit être de type datetime, date

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Et a quel endroit je détermine le mois si j’enlève la clause ?

    Cdt,
    Max

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Finalement j'ai trouvé la bonne requête, il me reste un dernier problème, comment mettre les 2 dates en automatique pour les 12 dernier mois ?

    c'est a dire pour chaque mois, ajouter le 1er jour du mois et le dernier dans la requete ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT count(*) AS nb, YEAR(start) AS an, MONTH(start) AS mois FROM $tbl_call WHERE start >= '2014-01-01' AND start <= '2014-01-31'  GROUP BY an, mois";
    Cdt,
    Max

  14. #14
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT count(*) AS nb, YEAR(start) AS an, MONTH(start) AS mois FROM $tbl_call WHERE start >= CONCAT(YEAR(CURDATE()),'-',MONTH(CURDATE()),'-01') AND start <=  LAST_DAY(CURDATE())  GROUP BY an, mois";
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  15. #15
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 597
    Points : 886
    Points
    886
    Par défaut
    Pourquoi choisis-tu de faire 12 requètes (1 par mois) alors que tu pourrais n'en faire qu'une, d'autant que GROUP BY est fait pour cela ?
    Que te donne ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(*) AS nb, YEAR(start) AS an, MONTH(start) AS mois FROM $tbl_call WHERE DATE_ADD(start, INTERVAL 12 MONTH) >=CURDATE() GROUP BY an, mois ORDER BY an,mois
    Participez vous aussi !
    Message utile
    Discussion résolue

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    ypcman, j'ai choisis de faire une requete par mois, car mon script de graphe est en JAVA, et la seule solution pour moi (que je sais faire) est d'intégrer 1 requête par mois pour arriver a afficher le graphe

    la valeur retourné est 7

    je sais pas a quoi correspond cette valeur ?

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    merci Spartacusply, ta requête marche très bien pour le mois en cours mais j'ai toujours le même problème je sais pas comment avoir le nombre par mois depuis 1 an ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT count(*) AS nb, YEAR(start) AS an, MONTH(start) AS mois FROM $tbl_call WHERE start >= CONCAT(YEAR(CURDATE()),'-',MONTH(CURDATE()),'-01') AND start <=  LAST_DAY(CURDATE())  GROUP BY an, mois";

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/07/2008, 11h34
  2. Extraction de tous les Lundis du mois dans une requête
    Par cumpa100 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 07/02/2008, 14h15
  3. Comment compter les jours par mois entre deux dates
    Par Doo89 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/01/2008, 21h21
  4. division par 0 dans une requête donne #Erreur
    Par bugprog dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 29/05/2007, 09h57
  5. [Access] Calcule par ligne dans une requête
    Par Belze dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2006, 09h09

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