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 :

Classement par compteur date [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut Classement par compteur date
    Bonjour le forum, et bonjour chers membres.

    Mon souci du jour est le suivant :

    Je dispise d'une table avec bcd d'enregistrement de pêrsonne avec entre autres deux champs :
    1 - leur departement sur deux chiffres
    2 - La date de leur enregistrement.

    J'essaie en vain de faire un classement indiquant soit par jour, soit par mois, le nombre de personnes pour un département donné qui se sont inscrite, question de faire des stats.

    Je récupere la variable département => $dept
    Je récupere la variable mois => $mois
    à partir de mon url

    $dept = $_GET['dept'];
    $mois = $_GET['mois'];

    Mais je ne parviens pas a écrire mon select count()....

    Quelqu'un pourrait il m'aider s'il vous plait?

    Merci et bonne journée



    Mais

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CONCAT(YEAR(Date_Inscription), '-', MONTH(Date_Inscription)) AS Mois_Inscription, COUNT(*) AS Nombre_Inscrits
    FROM Personnes
    GROUP BY YEAR(Date_Inscription), MONTH(Date_Inscription)
    WHERE Departement = '$dept'
    Petits détails :
    Je récupere la variable mois => $mois
    à partir de mon url
    Et l'année ?
    Si tu ne récupères que le mois et que tu t'en sers dans le WHERE de la requête, les années seront confondues, saus avec le système que je propose et qui devrait te donner, pour le mois de janvier, un résultat du genre :
    Mois_Inscription Nombre_Inscrits
    2007-01 25
    2008-01 30

    leur departement sur deux chiffres
    Le département n'est pas une donnée numérique et encore moins sur deux chiffres !
    - Corse = 2A et 2B
    - Départements d'outre-mer = 9xx
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Merci pour cette répide réponse, cependant j'ai deux erreurs.

    Je me suis permis au passage de renommer les champs pour qu'ils soient conformes à ma BDD :

    voici mon code :
    LEs champs "date" et "dept" sont nommés ainsi dans ma table du nom de "demandes"

    Je me demande si on doit pas rajouter DAY(date) dans le select car ma date est configurée comme suit : yyyy-mm-jj ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?
    $conn = mysql_connect('xxxxxx', 'xxxxxx', 'xxxxxx');
    $db = mysql_select_db('xxxxxx', $conn);
    $res = mysql_query("SELECT CONCAT(YEAR(date), '-', MONTH(date)) AS Mois, COUNT(*) AS Nbr FROM demandes GROUP BY YEAR(date), MONTH(date) WHERE dept='75'");
    $query = mysql_query($res, $conn);
    $row = mysql_fetch_row($query);
    $tot = $row[0] + 0;
    while ($ligne = mysql_fetch_assoc($res)) { 
    $date= $ligne["date"];
    echo 'le : '.$date.' - il y a eu : '.$tot.' demandes déposées <br>';
    }
    ?>
    Et les erreurs :

    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/clients/www/xxxxx.fr/compteurdem.php on line 6

    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/clients/www/xxxxx.fr/compteurdem.php on line 8

    Merci de votre aide

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par kaolivier Voir le message
    Les champs "date" et "dept" sont nommés ainsi dans ma table du nom de "demandes"
    Pour commencer, nommer une colonne 'date' est une mauvaise idée car c'est souvent un mot réservé d'une fonction qui retourne une date.

    Ensuite, si tu souhaites connaître le nombre de demandes déposées à une date précise, il n'y a évidemment pas besoin de MONTH et YEAR, il te suffit de faire la sélection directement sur la date, en formatant ta variable correctement pour interprétation par MySQL

    Maintenant dans ton code, tu écris :
    Mais il n'y a pas de colonne nommée 'date' dans la requête !

    Perso, je ferais plutôt :
    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
    <?php
    $conn = mysql_connect('xxxxxx', 'xxxxxx', 'xxxxxx');
    $db = mysql_select_db('xxxxxx', $conn);
    $res = mysql_query("SELECT CONCAT(YEAR(date), '-', MONTH(date)) AS Mois, COUNT(*) AS Nbr FROM demandes GROUP BY YEAR(date), MONTH(date) WHERE dept='75'");
    $query = mysql_query($res, $conn);
    $nb = mysql_num_rows($query); //Nb de lignes retournées par la requête
     
    if($nb = 0) {echo 'La requête ne retourne aucun résultat'}
    else
    {
     while ($ligne = mysql_fetch_array($query)) { 
     $date= $ligne[Mois];
     $nb_demandes = $ligne[Nbr];
     echo 'Au mois : '.$date.' - il y a eu : '.$nb_demandes.' demandes déposées.<br />';
     }
    }
    ?>
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Il me retourne une premiere erreur sur le select

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/clients/www/procofin.fr/www/reseau/compteurdem.php on line 6



    J'ai rajouté une variable dans mon url "annee", donc mon script php récupérera deux variables le départmeent et l'année
    $dept = $_GET['dept'];
    $annee = $_GET['annee'];
    que je devrais rajouter au where du select


    voici ma table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE demandes (
      NB int(20) NOT NULL auto_increment,
      IMAT int(11) NOT NULL default '0',
      dept int(11) NOT NULL default '0',
      nom text NOT NULL,
      pre text NOT NULL,
      date date NOT NULL default '0000-00-00',
      UNIQUE KEY num (NB)
    ) TYPE=MyISAM;
    url du script d'appel est
    http://www.test-internet.com/compteu...=75&annee=2008


    ce que j'essaie d'obtenir c'est du genre :

    Jan (01) 5 demandes
    Fev (02) X demandes
    etc...


    Merci de ta patience

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Merci pour votre temps, je suis passé par une boucle for et ca marche parfaitement :

    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
    19
    for ($i=1; $i<=12; $i++)
    {
    $res = mysql_query("select count(*) from demandes where MONTH(date)='$i'");
    $row = mysql_fetch_row($res);
    echo ''.$row[0].' demandes pour le mois ';
    if ($i==1){echo 'Janvier';}
    if ($i==2){echo 'Février';}
    if ($i==3){echo 'Mars';}
    if ($i==4){echo 'Avril';}
    if ($i==5){echo 'Mai';}
    if ($i==6){echo 'Juin';}
    if ($i==7){echo 'Juillet';}
    if ($i==8){echo 'Août';}
    if ($i==9){echo 'Septembre';}
    if ($i==10){echo 'Octobre';}
    if ($i==11){echo 'Novembre';}
    if ($i==12){echo 'Décembre';}
    echo '<br>';
    }
    Merci et bonne soirée

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Le problème est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $res = mysql_query("SELECT CONCAT(YEAR(date), '-', MONTH(date)) AS Mois, COUNT(*) AS Nbr FROM demandes GROUP BY YEAR(date), MONTH(date) WHERE dept='75'");
    $query = mysql_query($res, $conn);
    Il faudrait plutôt faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query = "SELECT CONCAT(YEAR(date), '-', MONTH(date)) AS Mois, COUNT(*) AS Nbr FROM demandes GROUP BY YEAR(date), MONTH(date) WHERE dept='75'";
    $res = mysql_query($query, $conn);
    $nb = mysql_num_rows($res); //Nb de lignes retournées par la requête
     
    ...
     
    while ($ligne = mysql_fetch_array($res))
    ...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. [AC-2010] classement par date
    Par mcaiki dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/08/2011, 09h50
  2. RecordSet classement par date
    Par Linio dans le forum ASP
    Réponses: 9
    Dernier message: 21/05/2008, 20h55
  3. [MySQL] Classement par date
    Par gunth dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 15/02/2008, 18h04
  4. [Conception] Classement par date et id : donner la priorité
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 01/02/2006, 15h04
  5. Problème classement par date
    Par Triomen dans le forum Langage SQL
    Réponses: 12
    Dernier message: 06/09/2005, 14h09

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