====== 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 **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