ai-je vraiment besoin de anet_ta ??
( (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']."')" ) : "" );
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
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.
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') ;
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
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 [...]
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