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

Requêtes MySQL Discussion :

Compter le nombre d'absences par mois, pour chaque étudiant


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 50
    Points
    50
    Par défaut Compter le nombre d'absences par mois, pour chaque étudiant
    Bonjour à tous,

    je travaille actuellement sur un système de gestion des absences d'étudiants.

    Actuellement j'essaye de générer un tableau de synthèse listant les étudiants avec le nombre d'absences pour chaque mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ETUDIANT       JANVIER       FEVRIER       ....       TOTAL
    --------       --------      --------                --------
    Etudiant 1      3            4                        7
    Etudiant 2      2            1                        3
    Voilà pour le résultat attendu.

    Concernant la structure de la base (je vous passe les détails autour) : on a une table creneaux contenant les différents créneaux de cours.
    Et une table pointage avec les absences (justifiées ou non selon le statut).
    Voici les tables avec quelques données.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    --
    -- Table structure for table `creneaux`
    --
     
    CREATE TABLE IF NOT EXISTS `creneaux` (
      `id` int(11) NOT NULL auto_increment,
      `groupe` int(11) NOT NULL,
      `matiere` int(11) NOT NULL,
      `enseignant` int(11) NOT NULL,
      `date` date NOT NULL,
      `heureDebut` time NOT NULL,
      `heureFin` time NOT NULL,
      `statut` tinyint(1) unsigned NOT NULL default '0' COMMENT '0 : non pointé ; 1 : déjà pointé',
      PRIMARY KEY  (`id`),
      KEY `groupe` (`groupe`),
      KEY `matiere` (`matiere`),
      KEY `enseignant` (`enseignant`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=15 ;
     
    --
    -- Dumping data for table `creneaux`
    --
     
    INSERT INTO `creneaux` (`id`, `groupe`, `matiere`, `enseignant`, `date`, `heureDebut`, `heureFin`, `statut`) VALUES
    (1, 5, 3, 4, '2009-06-03', '09:45:00', '11:15:00', 1),
    (2, 3, 2, 4, '2009-06-02', '13:15:00', '14:45:00', 1),
    (3, 5, 1, 4, '2009-06-05', '15:00:00', '16:30:00', 1),
    (4, 5, 3, 4, '2009-05-21', '09:45:00', '11:15:00', 1),
    (10, 5, 3, 4, '2009-06-16', '09:45:00', '11:15:00', 1),
    (9, 5, 3, 4, '2009-06-17', '09:45:00', '11:15:00', 1),
    (8, 5, 3, 4, '2009-06-05', '13:15:00', '14:45:00', 1),
    (11, 5, 3, 4, '2009-06-16', '08:00:00', '09:30:00', 1),
    (12, 7, 3, 4, '2009-06-09', '15:00:00', '16:30:00', 1),
    (13, 5, 3, 4, '2009-06-23', '09:45:00', '11:15:00', 1),
    (14, 7, 1, 4, '2009-06-29', '15:00:00', '16:30:00', 0);
     
    -- --------------------------------------------------------
     
    --
    -- Table structure for table `pointage`
    --
     
    CREATE TABLE IF NOT EXISTS `pointage` (
      `etudiant` int(11) NOT NULL,
      `creneau` int(11) NOT NULL,
      `statut` int(11) NOT NULL COMMENT '1 : absent, 2 : absence justifiée',
      PRIMARY KEY  (`etudiant`,`creneau`),
      KEY `creneau` (`creneau`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
     
    --
    -- Dumping data for table `pointage`
    --
     
    INSERT INTO `pointage` (`etudiant`, `creneau`, `statut`) VALUES
    (3, 4, 1),
    (2, 10, 1),
    (3, 10, 2),
    (3, 9, 1),
    (2, 13, 1),
    (3, 13, 1),
    (1, 2, 2),
    (3, 3, 1),
    (2, 11, 1),
    (3, 11, 2),
    (3, 8, 1);

    Un petit détail en plus (histoire de corser encore le problème sinon ce n'est pas amusant ) : les absences ne sont comptent pas par créneau mais par demi-journées...
    Cependant ça je sais faire, donc partons d'abord en comptant simplement les créneaux.
    Donc la question est : comment avoir une ligne par étudiant avec une colonne pour chaque mois et le nombre d'absences qui va bien ?
    Tout en sachant également que la table pointage ne contenant que les absences, il faut sortir 0 pour les mois où l'étudiant n'a jamais été pointé absent.

    J'espère que ce problème ne vous a pas donné trop mal à la tête et que quelqu'un pourra me fournir une piste.

    Si vous avez besoin de la moindre précision n'hésitez pas.

    Merci d'avance à tous.

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    C'est une sorte de tableau croisé dynamique que tu nous exposes-là.
    Avec les étudiants en lignes et les mois en colonnes.
    Vois si tu peux t'inspirer de mon article sur ce sujet dont le lien est dans ma signature.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 50
    Points
    50
    Par défaut
    Merci pour ton aide.

    Je n'avais pas pensé au IF(?, COUNT, 0), très bonne idée

    Bon la requête est un peu moche (beaucoup ) mais elle a le mérite de fonctionner.

    Merci encore, bon après-midi à toi.

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

Discussions similaires

  1. [XL-2003] Compter le nombre de jours par mois entre deux dates
    Par Mikayel dans le forum Excel
    Réponses: 8
    Dernier message: 23/09/2016, 13h36
  2. Compter le nombre de jour par mois d'un événement.
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/04/2011, 11h56
  3. [MySQL] compter le nombre de visiteurs par mois?
    Par mustapha_aim dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/08/2010, 15h26
  4. Compter le nombre d'articles par mois
    Par Al3x dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/08/2008, 18h14
  5. Réponses: 6
    Dernier message: 12/01/2008, 18h21

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