Table of Contents

Surveillance examen - portail et eScrupule

ai-je vraiment besoin de anet_ta ??

todo

(
    (isset($_SESSION['faculte']) && $_SESSION['faculte'] != '') 
        ?( 
            isset($_SESSION['autres']) 
            ? 
                " and (anet_ta.faculte NOT IN ( '" . implode($_SESSION['$arrayFacExlusion'], "', '") . "' ) 
                  and (anet_ta.faculte = '".$_SESSION['faculte']."' or cours_ta.faculte = '".$_SESSION['faculte']."'))" 
            : 
                " and (anet_ta.faculte = '".$_SESSION['faculte']."' or cours_ta.faculte = '".$_SESSION['faculte']."')" 
        ) 
    : 
        ""
);

Liste des cours ayant un examen lors de cette session

original :

SELECT DISTINCT session_cours_ta.ID_session_cours_ta
FROM session_cours_ta 
INNER JOIN cours_ta
ON cours_ta.ID_cours_ta = session_cours_ta.ID_cours
INNER JOIN session_cours_date_ta
ON session_cours_date_ta.ID_session_cours = session_cours_ta.ID_session_cours_ta
WHERE session_cours_ta.ID_session='".$_REQUEST['ID_session_ta']."' 
AND (session_cours_ta.type_exam = 'E' OR session_cours_ta.type_exam = 'P')
ORDER BY cours_ta.mnemonique"

steph : j'enleve l'order by inutile

SELECT DISTINCT session_cours_ta.ID_session_cours_ta
           FROM session_cours_ta 
     INNER JOIN cours_ta
             ON cours_ta.ID_cours_ta = session_cours_ta.ID_cours
     INNER JOIN session_cours_date_ta
             ON session_cours_date_ta.ID_session_cours = session_cours_ta.ID_session_cours_ta
          WHERE     session_cours_ta.ID_session='71' 
                AND (    session_cours_ta.type_exam = 'E' 
                      OR session_cours_ta.type_exam = 'P')     

resultat : meme nombre de lignes : 663

test avec table temporaire

CREATE TEMPORARY TABLE cours_ayant_examens (
    ID_session_cours_ta INT(11)
);
 
INSERT INTO cours_ayant_examens (ID_session_cours_ta)
SELECT DISTINCT session_cours_ta.ID_session_cours_ta
           FROM session_cours_ta 
     INNER JOIN cours_ta
             ON cours_ta.ID_cours_ta = session_cours_ta.ID_cours
     INNER JOIN session_cours_date_ta
             ON session_cours_date_ta.ID_session_cours = session_cours_ta.ID_session_cours_ta
          WHERE     session_cours_ta.ID_session='71' 
                AND (    session_cours_ta.type_exam = 'E' 
                      OR session_cours_ta.type_exam = 'P') ;
 
SELECT * FROM cours_ayant_examens ;

resultat: meme nombre de ligne : 663

Donc maintenant pour la requete suivante on peut la faire en jointure avec cette table temporaire

2e Requete : Kesako ??

On boucle sur les resultat de la premiere requete et pour chaque ligne on execute la requete suivante :

// envoi confirmation mails surveillance examens écrits aux titulaires
        for($CptExamenSession=0;$CptExamenSession<mysql_num_rows($RSTExamenSession);$CptExamenSession++)
        {
                $LigneExamenSession = mysql_fetch_row($RSTExamenSession) or die(mysql_error());
                // on va chercher les titulaires de tous les cours qui ont un examen E/P avec surveillants
                $ReqCheckSurveillant = "select 1 from session_surveillance_ta 
                                                                        where session_surveillance_ta.ID_session_cours='".$LigneExamenSession[0]."'";
                $RSTCheckSurveillant = mysql_query($ReqCheckSurveillant) or die(mysql_error());
                if(mysql_num_rows($RSTCheckSurveillant)!=0)
                {
                        array_push($arrayExamen,$LigneExamenSession[0]);
                }
        }

extraction de la requete :

SELECT 1 FROM session_surveillance_ta 
 WHERE session_surveillance_ta.ID_session_cours='".$LigneExamenSession[0]."'

rewritten for testing as :

SELECT 1 
 FROM session_surveillance_ta 
WHERE session_surveillance_ta.ID_session_cours= 49516
 
-- or --
 
SELECT ID_session_surveillance_ta 
  FROM session_surveillance_ta 
 WHERE session_surveillance_ta.ID_session_cours= '49516' ;

nouvelle query 2in1 *

CREATE TEMPORARY TABLE cours_ayant_examens (
    ID_session_cours_ta INT(11)
);
 
INSERT INTO cours_ayant_examens (ID_session_cours_ta)
SELECT DISTINCT session_cours_ta.ID_session_cours_ta
           FROM session_cours_ta 
     INNER JOIN cours_ta
             ON cours_ta.ID_cours_ta = session_cours_ta.ID_cours
     INNER JOIN session_cours_date_ta
             ON session_cours_date_ta.ID_session_cours = session_cours_ta.ID_session_cours_ta
          WHERE     session_cours_ta.ID_session='71' 
                AND (    session_cours_ta.type_exam = 'E' 
                      OR session_cours_ta.type_exam = 'P') ;
 
    SELECT cae.ID_session_cours_ta, ss.*
      FROM cours_ayant_examens AS cae
INNER JOIN session_surveillance_ta AS ss
        ON ss.ID_session_cours = cae.ID_session_cours_ta ;

Cela me donne 16 total (16 lignes). la query suivante

 SELECT * FROM session_surveillance_ta

devrait avoir le meme nombre de lignes soit 16 total, donc c'est bon.

Les 2 premieres queries en une seule

SELECT DISTINCT session_cours_ta.ID_session_cours_ta, ss.*
           FROM session_cours_ta 
     INNER JOIN cours_ta
             ON cours_ta.ID_cours_ta = session_cours_ta.ID_cours
     INNER JOIN session_cours_date_ta
             ON session_cours_date_ta.ID_session_cours = session_cours_ta.ID_session_cours_ta
     INNER JOIN session_surveillance_ta AS ss
            ON ss.ID_session_cours = session_cours_ta.ID_session_cours_ta 
         WHERE     session_cours_ta.ID_session='71' 
                AND (    session_cours_ta.type_exam = 'E' 
                      OR session_cours_ta.type_exam = 'P') ;

Essai d'ajout de la troisieme requete

SELECT DISTINCT session_cours_ta.ID_session_cours_ta, 
                ss.*,
                agent_ta.matricule, agent_ta.nom, agent_ta.prenom, agent_ta.ID_agent_ta, agent_ta.email
           FROM session_cours_ta 
     INNER JOIN cours_ta
             ON cours_ta.ID_cours_ta = session_cours_ta.ID_cours
     INNER JOIN session_cours_date_ta
             ON session_cours_date_ta.ID_session_cours = session_cours_ta.ID_session_cours_ta
 
     INNER JOIN session_surveillance_ta AS ss
            ON ss.ID_session_cours = session_cours_ta.ID_session_cours_ta 
 
     INNER JOIN agent_ta
             ON ss.ID_agent = agent_ta.ID_agent_ta
 
         WHERE     session_cours_ta.ID_session='71' 
                AND (    session_cours_ta.type_exam = 'E' 
                      OR session_cours_ta.type_exam = 'P') ;

J'ai enlevé la partie où on vérifie la charge et les mandats et les statuts … c'est inutile car la personne ne serait pas dans la table session_cours_ta si elle ne satisfiait pas ces critères. Cette vérification a déja été faite lors de l'insertion et lors de la proposition de choisir une personne.

Resultat :

ID_session_cours_ta	ID_session_surveillance_ta	ID_session_cours	ID_agent	matricule	nom	prenom	ID_agent_ta	email
49484	33	49484	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
49479	30	49479	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
49473	39	49473	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
49472	37	49472	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
49465	27	49465	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
49461	26	49461	1253	47819	ANDRIANNE	Gilles	1253	Gilles.Andrianne@ulb.ac.be
49033	38	49033	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
49067	23	49067	609	27700	DAULIE	Renaud	609	Renaud.DAULIE@ulb.ac.be
48933	19	48933	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
48951	29	48951	876	18175	KAPPEL	Jenny	876	Jenny.Kappel@ulb.ac.be
48951	28	48951	1254	47293	ESSEX	Richard	1254	Richard.Essex@ulb.ac.be
48952	32	48952	1254	47293	ESSEX	Richard	1254	Richard.Essex@ulb.ac.be
48986	36	48986	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
49254	35	49254	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
49253	34	49253	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be
49006	31	49006	1480	52101	ALEXANDRIDOU	Alexandra	1480	Alexandra.Alexandridou@ulb.ac.be

4e requete + horaire

SELECT DISTINCT agent_ta.email, session_cours_ta.ID_session_cours_ta, 
                ss.*,
                agent_ta.matricule, agent_ta.nom, agent_ta.prenom,
                cours_ta.mnemonique, 
                session_cours_date_ta.*
           FROM session_cours_ta 
     INNER JOIN cours_ta
             ON cours_ta.ID_cours_ta = session_cours_ta.ID_cours
     INNER JOIN session_cours_date_ta
             ON session_cours_date_ta.ID_session_cours = session_cours_ta.ID_session_cours_ta
 
     INNER JOIN session_surveillance_ta AS ss
            ON ss.ID_session_cours = session_cours_ta.ID_session_cours_ta 
 
     INNER JOIN agent_ta
             ON ss.ID_agent = agent_ta.ID_agent_ta
 
 
 
         WHERE     session_cours_ta.ID_session='71' 
                AND (    session_cours_ta.type_exam = 'E' 
                      OR session_cours_ta.type_exam = 'P') 

resultat :

email	ID_session_cours_ta	ID_session_surveillance_ta	ID_session_cours	ID_agent	matricule	nom	prenom	mnemonique
Alexandra.Alexandridou@ulb.ac.be	49484	33	49484	1480	52101	ALEXANDRIDOU	Alexandra	LANG-S-212
Alexandra.Alexandridou@ulb.ac.be	49479	30	49479	1480	52101	ALEXANDRIDOU	Alexandra	LANG-S-211
Alexandra.Alexandridou@ulb.ac.be	49473	39	49473	1480	52101	ALEXANDRIDOU	Alexandra	LANG-S-201
Alexandra.Alexandridou@ulb.ac.be	49472	37	49472	1480	52101	ALEXANDRIDOU	Alexandra	LANG-S-201
Alexandra.Alexandridou@ulb.ac.be	49465	27	49465	1480	52101	ALEXANDRIDOU	Alexandra	LANG-S-1002
Gilles.Andrianne@ulb.ac.be	49461	26	49461	1253	47819	ANDRIANNE	Gilles	LANG-S-1001
[...]

Un peut comme le haut de la page :

SELECT DISTINCT session_cours_date_ta.date_exam, cours_ta.mnemonique, session_cours_date_ta.heure_exam, session_cours_ta.local,
                agent_ta.email, agent_ta.matricule, 
 
           FROM session_cours_ta 
     INNER JOIN cours_ta
             ON cours_ta.ID_cours_ta = session_cours_ta.ID_cours
     INNER JOIN session_cours_date_ta
             ON session_cours_date_ta.ID_session_cours = session_cours_ta.ID_session_cours_ta
 
     INNER JOIN session_surveillance_ta AS ss
            ON ss.ID_session_cours = session_cours_ta.ID_session_cours_ta 
 
     INNER JOIN agent_ta
             ON ss.ID_agent = agent_ta.ID_agent_ta
 
 
 
         WHERE     session_cours_ta.ID_session='71' 
                AND (    session_cours_ta.type_exam = 'E' 
                      OR session_cours_ta.type_exam = 'P') 
      ORDER BY session_cours_date_ta.date_exam, session_cours_date_ta.heure_exam, cours_ta.mnemonique, session_cours_ta.local,
                agent_ta.email, agent_ta.matricule, agent_ta.nom, agent_ta.prenom                

resultat :

ID_session_cours_date_ta	date_exam	ID_cours_ta	mnemonique	heure_exam	local	ID_agent_ta	email	matricule
42154	2016-05-17	35216	LANG-S-1001	09:00:00	S.K.1.105/S.UB2.252A	1253	Gilles.Andrianne@ulb.ac.be	47819
42158	2016-05-17	35217	LANG-S-1002	09:00:00	S.K.1.105/S.UB2.252A	1480	Alexandra.Alexandridou@ulb.ac.be	52101
41644	2016-05-17	26604	GERM-B-105	14:00:00	S.UB2.252A	876	Jenny.Kappel@ulb.ac.be	18175
41644	2016-05-17	26604	GERM-B-105	14:00:00	S.UB2.252A	1254	Richard.Essex@ulb.ac.be	47293
42172	2016-05-17	35224	LANG-S-211	17:30:00	S.JANSON	1480	Alexandra.Alexandridou@ulb.ac.be	52101
[...]

avec les titulaires

SELECT DISTINCT titulaire.email, session_cours_date_ta.ID_session_cours_date_ta, session_cours_date_ta.date_exam, cours_ta.ID_cours_ta, cours_ta.mnemonique,  
                session_cours_date_ta.heure_exam, session_cours_ta.local,
                surveillant.ID_agent_ta, surveillant.email, surveillant.matricule
 
           FROM session_cours_ta 
     INNER JOIN cours_ta
             ON cours_ta.ID_cours_ta = session_cours_ta.ID_cours
     INNER JOIN session_cours_date_ta
             ON session_cours_date_ta.ID_session_cours = session_cours_ta.ID_session_cours_ta
 
     INNER JOIN session_surveillance_ta AS ss
            ON ss.ID_session_cours = session_cours_ta.ID_session_cours_ta 
 
     INNER JOIN agent_ta AS surveillant
             ON ss.ID_agent = surveillant.ID_agent_ta 
 
 
     INNER JOIN charge_ta
             ON  charge_ta.ID_cours = cours_ta.ID_cours_ta
                AND (charge_ta.Statut='T' OR charge_ta.Statut='C' OR charge_ta.Statut='S')
                AND charge_ta.Anac = 2015
     INNER JOIN agent_ta AS titulaire
             ON titulaire.ID_agent_ta = charge_ta.ID_agent
 
 
         WHERE     session_cours_ta.ID_session='71' 
                AND (    session_cours_ta.type_exam = 'E' 
                      OR session_cours_ta.type_exam = 'P')                
 
 
      ORDER BY session_cours_date_ta.date_exam, session_cours_date_ta.heure_exam, cours_ta.mnemonique, session_cours_ta.local,
                surveillant.email, surveillant.matricule, surveillant.nom, surveillant.prenom