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.