SELECT e.idGroup, e.idEleve, e.nom, e.prenom, s.date, s.idSeance
FROM eleve e JOIN assiduite a ON e.idEleve = a.idEleve JOIN seance s ON s.idSeance = a.idSeance
WHERE a.present = 0
ORDER BY e.idGroup, e.nom, e.prenom, s.date, s.idSeance
Ce qui donne le résultat suivant:<html>
<head>
<title> Absence/présence élèves </title>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<link rel="stylesheet" href="style.css">
<table BORDER=1 BGCOLOR="#CCCCCC">
<tr>
<td>Nom - Prenom</td><td>8h00 - 10h00</td><td>10h00 - 12h00</td><td>13h30 - 15h30</td><td>15h30 - 17h30</td>
</tr>
<tr>
<td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" class="r1">absent(e)</option>
</td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</tr>
<tr>
<td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</tr>
<tr>
<td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</td>
<td><select name="abs_prs" >
<option value="present(e)" >présent(e)</option>
<option STYLE='color:red' id='select1' value="absent(e)" title="1" >absent(e)</option>
</td>
</tr>
<tr>
<td>
Formateur
</td>
<td>
Formateur : <br/>
<select name="Formateur" >
<option value="null" >choix ...</option>
<option id='select1' value="Mme Anneau" title="1" >Mme Anneau</option>
<option id='select1' value="Mme Chambers" title="2" >Mme Chambers</option>
<option id='select1' value="Mr Deal" title="3" >Mr Deal</option>
<option id='select1' value="Mr Marion" title="4" >Mr Marion</option>
<option id='select1' value="Mme Roux" title="5" >Mme Roux</option>
<option id='select1' value="Mme Sukhvinder" title="6" >Mme Sukhvinder</option>
<option id='select1' value="Mr Valema" title="7" >Mr Valema</option>
<option id='select1' value="Mme Viard" title="8" >Mme Viard</option>
<option id='select1' value="Mr Zahraoui" title="9" >Mr Zahraoui</option>
</td>
<td>
Formateur : <br/>
<select name="Formateur" >
<option value="null" >choix ...</option>
<option id='select1' value="Mme Anneau" title="1" >Mme Anneau</option>
<option id='select1' value="Mme Chambers" title="2" >Mme Chambers</option>
<option id='select1' value="Mr Deal" title="3" >Mr Deal</option>
<option id='select1' value="Mr Marion" title="4" >Mr Marion</option>
<option id='select1' value="Mme Roux" title="5" >Mme Roux</option>
<option id='select1' value="Mme Sukhvinder" title="6" >Mme Sukhvinder</option>
<option id='select1' value="Mr Valema" title="7" >Mr Valema</option>
<option id='select1' value="Mme Viard" title="8" >Mme Viard</option>
<option id='select1' value="Mr Zahraoui" title="9" >Mr Zahraoui</option>
</td>
<td>
Formateur : <br/>
<select name="Formateur" >
<option value="null" >choix ...</option>
<option id='select1' value="Mme Anneau" title="1" >Mme Anneau</option>
<option id='select1' value="Mme Chambers" title="2" >Mme Chambers</option>
<option id='select1' value="Mr Deal" title="3" >Mr Deal</option>
<option id='select1' value="Mr Marion" title="4" >Mr Marion</option>
<option id='select1' value="Mme Roux" title="5" >Mme Roux</option>
<option id='select1' value="Mme Sukhvinder" title="6" >Mme Sukhvinder</option>
<option id='select1' value="Mr Valema" title="7" >Mr Valema</option>
<option id='select1' value="Mme Viard" title="8" >Mme Viard</option>
<option id='select1' value="Mr Zahraoui" title="9" >Mr Zahraoui</option>
</td>
<td>
Formateur : <br/>
<select name="Formateur" >
<option value="null" >choix ...</option>
<option id='select1' value="Mme Anneau" title="1" >Mme Anneau</option>
<option id='select1' value="Mme Chambers" title="2" >Mme Chambers</option>
<option id='select1' value="Mr Deal" title="3" >Mr Deal</option>
<option id='select1' value="Mr Marion" title="4" >Mr Marion</option>
<option id='select1' value="Mme Roux" title="5" >Mme Roux</option>
<option id='select1' value="Mme Sukhvinder" title="6" >Mme Sukhvinder</option>
<option id='select1' value="Mr Valema" title="7" >Mr Valema</option>
<option id='select1' value="Mme Viard" title="8" >Mme Viard</option>
<option id='select1' value="Mr Zahraoui" title="9" >Mr Zahraoui</option>
</td>
</tr>
<tr>
<td>
Matière
</td>
<td>
Matière : <br/>
<select name="Matière" >
<option value="null2" >choix ...</option>
<option id='select1' value="Anglais" title="1" >Anglais</option>
<option id='select1' value="Communication" title="2" >Communication</option>
<option id='select1' value="Culture" title="3" >Culture</option>
<option id='select1' value="Droit" title="4" >Droit</option>
<option id='select1' value="Economie générale" title="5" >Economie générale</option>
<option id='select1' value="Gestion" title="6" >Gestion</option>
<option id='select1' value="Informatique" title="7" >Informatique</option>
<option id='select1' value="Management" title="8" >Management</option>
<option id='select1' value="Management des entreprises" title="9" >Management des entreprises </option>
<option id='select1' value="Marketing" title="10" >Marketing</option>
</td>
<td>
Matière : <br/>
<select name="Matière" >
<option value="null2" >choix ...</option>
<option id='select1' value="Anglais" title="1" >Anglais</option>
<option id='select1' value="Communication" title="2" >Communication</option>
<option id='select1' value="Culture" title="3" >Culture</option>
<option id='select1' value="Droit" title="4" >Droit</option>
<option id='select1' value="Economie générale" title="5" >Economie générale</option>
<option id='select1' value="Gestion" title="6" >Gestion</option>
<option id='select1' value="Informatique" title="7" >Informatique</option>
<option id='select1' value="Management" title="8" >Management</option>
<option id='select1' value="Management des entreprises" title="9" >Management des entreprises </option>
<option id='select1' value="Marketing" title="10" >Marketing</option>
</td>
<td>
Matière : <br/>
<select name="Matière" >
<option value="null2" >choix ...</option>
<option id='select1' value="Anglais" title="1" >Anglais</option>
<option id='select1' value="Communication" title="2" >Communication</option>
<option id='select1' value="Culture" title="3" >Culture</option>
<option id='select1' value="Droit" title="4" >Droit</option>
<option id='select1' value="Economie générale" title="5" >Economie générale</option>
<option id='select1' value="Gestion" title="6" >Gestion</option>
<option id='select1' value="Informatique" title="7" >Informatique</option>
<option id='select1' value="Management" title="8" >Management</option>
<option id='select1' value="Management des entreprises" title="9" >Management des entreprises </option>
<option id='select1' value="Marketing" title="10" >Marketing</option>
</td>
<td>
Matière : <br/>
<select name="Matière" >
<option value="null2" >choix ...</option>
<option id='select1' value="Anglais" title="1" >Anglais</option>
<option id='select1' value="Communication" title="2" >Communication</option>
<option id='select1' value="Culture" title="3" >Culture</option>
<option id='select1' value="Droit" title="4" >Droit</option>
<option id='select1' value="Economie générale" title="5" >Economie générale</option>
<option id='select1' value="Gestion" title="6" >Gestion</option>
<option id='select1' value="Informatique" title="7" >Informatique</option>
<option id='select1' value="Management" title="8" >Management</option>
<option id='select1' value="Management des entreprises" title="9" >Management des entreprises </option>
<option id='select1' value="Marketing" title="10" >Marketing</option>
</td>
</tr>
</table>
</body>
</html>
Pour calculer le nombre de présences et d'absences d'un élève il suffit de compter dans la table "assiduité" et pour prendre en compte l'année de formation il suffit de se baser sur la date de la séance dont on contrôle l'assiduité. Voici les 2 requêtes qui répondent à ce traitement:Sinon est ce que tu pense que c'est possible de demander une personne et que cela affiche le nombre d'heure de présence dans l'établissement et le nombre d'heure d'absences?
Et aussi mon tuteur m'a demander de prendre en compte l'année courante :
exemple : un élève de BTS AG de 1ère année cette année devra être en BTS AG de 2ème année l'an prochain.
C'est possible ?
Merci d'avance.
SELECT e.idEleve, e.nom, e.prenom, COUNT(a.present) as nbre_presences
FROM eleve e JOIN assiduite a ON e.idEleve = a.idEleve JOIN seance s ON s.idSeance = a.idSeance
WHERE a.present = 1 AND YEAR(s.date) = YEAR(Now())
GROUP BY e.idEleve, e.nom, e.prenom
###############################################SELECT e.idEleve, e.nom, e.prenom, COUNT(a.present) as nbre_absences
FROM eleve e JOIN assiduite a ON e.idEleve = a.idEleve JOIN seance s ON s.idSeance = a.idSeance
WHERE a.present = 0 AND YEAR(s.date) = YEAR(Now())
GROUP BY e.idEleve, e.nom, e.prenom
--
-- Structure de la table `assiduite`
--
CREATE TABLE IF NOT EXISTS `assiduite` (
`idSeance` int(11) NOT NULL,
`idEleve` int(11) NOT NULL,
`present` tinyint(1) NOT NULL DEFAULT '0',
UNIQUE KEY `idAssiduite` (`idSeance`,`idEleve`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
L'id Séance identifie la séance et l'id Eleve identifie l'élève, elles sont tous les deux des clés étrangères.ok je comprend mieux.Je peux bien mettre mon champs présent à "1" ?Bonjour,
Bon, le modèle que je t'ai proposé n'est qu'un exemple très simplifié et non complet, il faut donc le reconstruire à tête reposée. En revanche il présente une vue globale sur l'approche conceptuelle d'un tel cas.
Pour répondre à tes questions, voyons la structure de la table "assiduite" qui peut être comme ça en SQL:L'id Séance identifie la séance et l'id Eleve identifie l'élève, elles sont tous les deux des clés étrangères.-- -- Structure de la table `assiduite` -- CREATE TABLE IF NOT EXISTS `assiduite` ( `idSeance` int(11) NOT NULL, `idEleve` int(11) NOT NULL, `present` tinyint(1) NOT NULL DEFAULT '0', UNIQUE KEY `idAssiduite` (`idSeance`,`idEleve`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Pour ce qui est du nom "idSeance" ou "refSeance" tu peux l'appeler comme tu veux, le principal est de savoir que le champ "idSeance" dans la table "assiduite" n'est que le sosie typique qui joue le rôle de clé étrangère (jointure) qui fait le lien dans la table Séance avec la clé primaire "idSeance". Et de même pour le champ idEleve.
En ce qui concerne la clé primaire de la table "assiduite", elle n'en a pas car elle n'en a pas besoin puisqu'elle n'est pas référencée relationnellement dans d'autres tables qui ont besoin de ses données, son simple rôle est d'associer une séance à un élève pour comptabiliser ses présences et absences dans le temps, c'est elle donc qui fait référence aux tables séance et élève.
Dans le modèle conceptuel: l'assiduité est une association et l'élève et la séance sont des entités. Car les informations d'assiduité ne peuvent pas exister sans l'association d'un élève et d'une séance de cours. Contrairement, les informations de la séance et de l'élève existent sans l'existence de l'assiduité.
L'association "assiduite" est donc une table qui enregistre les couples de références d'une séances et d'un élève et il n y a aucune table dans le modèle qui a besoin de référencer la table "assiduite". Donc elle n'a pas de clé primaire ou d'identifiant relationnel comme les tables/entités.
Mais, pour que les couples (idSeance, idEleve) soient uniques pour ne pas risquer d'enregistrer des doublons d'état de présence d'un élève pour une même séance, on a besoin de placer un index unique sur ces 2 champs. Ce qui est réalisé par l'instruction : UNIQUE KEY `idAssiduite` (`idSeance`,`idEleve`)
Et c'est ça la différence entre une clé primaire (jouant un double rôle relationnel et d'unicité d'index) et un index unique (jouant simplement un rôle d'unicité d'index)
Je rappelle aussi qu'un index joue un rôle d'accès rapide aux enregistrements en cas de recherche.
Et qu'une clé primaire/clé étrangère joue le rôle de jointure relationnelle entre tables
CREATE TABLE ELEVES(
IdEleve SERIAL NOT NULL UNIQUE PRIMARY KEY ,
Nom VARCHAR( 20 ) NOT NULL ,
Prenom VARCHAR( 20 ) NOT NULL ,
IdClasse VARCHAR( 20 )
);
Oui c'est ça, un entier court.Sinon je n'est pas compris à quoi sert le "tinyint" c'est pour dire que c'est un petit entier?
ce sont des directives pour MySQL.et aussi la dernière ligne "ENGINE=InnoDB DEFAULT CHARSET=latin1" : à quoi sert elle? Parce que moi quand je code je met rien à la fin
mais quand tu crée une base il te demande le format d'encodage donc on va pas le redéfinir à chaque fois !?DEFAULT CHARSET=latin1 : permet de définir le codage de caractère par défaut. Ici c'est latin1 mais tu peux mettre d'autres formats d'encodage comme : utf8_general_ci.
utf8_general_ci, mais tu n'es pas obligé de mettre ces directives à chaque create.mais quand tu crée une base il te demande le format d'encodage donc on va pas le redéfinir à chaque fois !?
Et d'ailleurs il faut prendre quel langage ?
Oui si tu veux.et pour mon champs présent je peux bien le mettre à 1 par défaut?
moi j'ai pris "latin1_swedish_ci" tu pense qu'il faut que je change ? ça marchera quand même avec mon site?utf8_general_ci, mais tu n'es pas obligé de mettre ces directives à chaque create.mais quand tu crée une base il te demande le format d'encodage donc on va pas le redéfinir à chaque fois !?
Et d'ailleurs il faut prendre quel langage ?
Merci pour ce cours très instructif!! =D>
<?php
function ListeEleves($connex)
{
$sql="SELECT* FROM ELEVES;";
$resu=pg_exec($connex,$sql);
return $resu;
}
?>
ça m'affiche :
<html>
<head>
<title> Eleves : liste </title>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
</head>
<body>
<center>
<h1> Liste des Eleves </h1>
<Table Border=2 bgcolor=yellow>
<tr>
<td bgcolor=white> Liste des Eleves </td>
</tr>
</table>
</center>
</body>
</html>
mais il n'y a pas d'élèves alors que j'en est rentrer dans la base.